为什么不'在某些情况下,我们需要在JavaScript函数定义周围多加一对括号
Why don't we need an extra pair of parentheses around JavaScript function definition in some cases?
由于语法错误,以下代码无法工作。
function() {
alert('foo')
}()
上面代码的JSFiddle URL:http://jsfiddle.net/qr2fr/
可以通过以下方式在函数定义周围添加一对额外的括号来修复此代码。
(function() {
alert('foo')
})()
上面代码的JSFiddle URL:http://jsfiddle.net/t6sJs/
然而,下面的JavaScript代码工作正常,并在函数定义周围没有额外的括号的情况下提醒字符串"foo"。
var a = function() {
alert('foo')
}()
上面代码的JSFiddle URL:http://jsfiddle.net/qLKsq/
为什么这段代码在函数定义周围没有额外的一对括号的情况下工作?
在JavaScript中定义函数有两种方法。
声明(在编译时求值)和表达式。
您可以立即涉及表达式,但不能涉及声明。
紧挨在前面的内容确定function
是表达式还是声明。
CCD_ 2使其成为一个表达式。CCD_ 3使其成为一个表达式。"什么都没有"使它成为一种宣言。
}()
只有在函数被强制为表达式时才有效。您通常会看到(function(){...})()
来实现这一点,尽管吝啬鬼可能会使用!function(){...}()
来保存一个字节(以操作为代价)。类似地,var a = ...
将操作数作为表达式,因此}()
起作用。
相关文章:
- jQuery自定义验证比较多个输入的序列
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- 在ES6中,模块将导致多个网络调用,因为两个模块不能在单个文件中定义
- 创建自定义函数以在函数上运行完整的多选下拉列表
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- Wordpress自定义元框多图像上传
- 用HTML5FileReader填充的Javascript多维数组未定义(但仅在首次使用时!)
- 当使用多个false时,Select2显示未定义
- 在 magento 中使用多个价格,但在更改自定义选项时不会更新
- 图表.js - 具有多个值的自定义工具提示
- 在构造函数中定义函数会比将其附加到原型消耗更多的内存
- 如何在 AngularJS 中创建和显示多个自定义指令
- jqGrid - 如何通过自定义格式化程序提供多个预定义的格式化程序
- 在同一页面上多次使用的自定义指令 (AngularJS) 中的验证
- 定义变量是否比在 JS 中覆盖变量使用更多的资源
- 自定义共享网址Google+与多参数
- 帆上的自定义和多语言消息如何出错 js.
- 谷歌地图:将带有信息框的多个标记添加到自定义地图
- 如何在字符串中查找子字符串,并返回一个包含子Javascript周围多个字符的新字符串
- 为什么不'在某些情况下,我们需要在JavaScript函数定义周围多加一对括号