JavaScript函数定义的常见注意事项小结
作者:bea
本文就javascript函数定义的常见问题进行了总结。包含了初学者常犯的错误。分享给大家供大家参考。具体总结如下: 1. 函数声明的同时JS引擎还定义了一个与函数名同名的变量,我们在调用这个函数的时候实际上是在使用这个变量,且它可以在函数声明之前调用,例如 foo(); //这里实际上是使用了一函数变量 function foo() { alert('hello'); } 2. 函数表达式,此时将匿名函数赋值给了一变量,此变量需在定义后使用,例如 foo()
本文就javascript函数定义的常见问题进行了总结。包含了初学者常犯的错误。分享给大家供大家参考。具体总结如下:
1. 函数声明的同时JS引擎还定义了一个与函数名同名的变量,我们在调用这个函数的时候实际上是在使用这个变量,且它可以在函数声明之前调用,例如
foo(); //这里实际上是使用了一函数变量
function foo() {
alert('hello');
}
2. 函数表达式,此时将匿名函数赋值给了一变量,此变量需在定义后使用,例如
foo(); //报错,未定义
var foo = function() {
alert('hello');
}
3. 函数表达式(with函数名),这种用法最好避免,此时非IE浏览器中该函数名只在内部可用,例如
bar(5); //报错,未定义
var bar = function foo(n) {
if (n == 1)
return 1;
else
return n * foo(n - 1);
}
foo(5); //非IE报错,未定义
bar(5); //正确
4. 用Function构造函数定义,这种方式效率低,每次执行函数的时候,其函数体都会被解析一次。此外这样声明的函数是不会继承当前声明位置的作用域,它默认只会拥有全局作用域,例如
function foo() {
var bar = 'hello';
return Function('alert(bar)'); //报错,全局变量bar未定义
}
foo()();
相信本文所述对大家javascript WEB程序设计的学习有一定的借鉴价值。
有用 | 无用
1. 函数声明的同时JS引擎还定义了一个与函数名同名的变量,我们在调用这个函数的时候实际上是在使用这个变量,且它可以在函数声明之前调用,例如
foo(); //这里实际上是使用了一函数变量
function foo() {
alert('hello');
}
2. 函数表达式,此时将匿名函数赋值给了一变量,此变量需在定义后使用,例如
foo(); //报错,未定义
var foo = function() {
alert('hello');
}
3. 函数表达式(with函数名),这种用法最好避免,此时非IE浏览器中该函数名只在内部可用,例如
bar(5); //报错,未定义
var bar = function foo(n) {
if (n == 1)
return 1;
else
return n * foo(n - 1);
}
foo(5); //非IE报错,未定义
bar(5); //正确
4. 用Function构造函数定义,这种方式效率低,每次执行函数的时候,其函数体都会被解析一次。此外这样声明的函数是不会继承当前声明位置的作用域,它默认只会拥有全局作用域,例如
function foo() {
var bar = 'hello';
return Function('alert(bar)'); //报错,全局变量bar未定义
}
foo()();
相信本文所述对大家javascript WEB程序设计的学习有一定的借鉴价值。
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- js实现按Ctrl+Enter发送效果
- javascript搜索框点击文字消失失焦时文本出现
- 输入框过滤非数字的js代码
- 小结Node.js中非阻塞IO和事件循环
- JavaScript将取代AppleScript?
- Javascript MVC框架Backbone.js详解
- JS回调函数的应用简单实例
- js实现在同一窗口浏览图片
- js实现获取焦点后光标在字符串后
- 在JavaScript中构建ArrayList示例代码
- 取得元素的左和上偏移量的方法
- JS实现OCX控件的事件响应示例
- javascript快速排序算法详解
- js生成的验证码的实现与技术分析
- Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
- nodejs命令行参数处理模块commander使用实例
- node.js中使用q.js实现api的promise化
- Javascript判断文件是否存在(客户端/服务器端)
- ie8下修改input的type属性报错的解决方法