Kon*_*ter 53 javascript anonymous-function
当我遇到调用匿名函数的奇怪方式时,我正在阅读Twitter上的JS源代码 - 在改进我的JS知识库的过程中:
!function( $ ) {
...
}( window.jQuery );
Run Code Online (Sandbox Code Playgroud)
......这有效!:)
对每个人来说,显而易见的是:
function ( $ ) { ... } ( window.jQuery )
Run Code Online (Sandbox Code Playgroud)
不起作用(语法错误),而这一个是正确的:
(function ( $ ) { .... })( window.jQuery )
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这个魔术(为什么案例与!function作品)?
Fel*_*her 73
当function在语句位置(作为语句中的第一个标记)满足关键字时,函数声明表示为函数语句.函数语句被提升到作用域的顶部,不能立即调用并且必须具有名称.
当在表达式位置满足关键字时(即不作为语句中的第一个标记,在您的示例中!是第一个标记),函数声明表示为函数表达式,它可以是匿名的并返回新值创造了功能.由于它返回新创建的函数的值,因此可以通过在其后面添加括号来立即调用它.
将括号内的声明包装起来是相同的,但比使用!or或前缀更为常见+.
(function () {
...
}());
Run Code Online (Sandbox Code Playgroud)
第二种形式function () {}是声明.的!操作者转换为这个表达式.您还可以找到人们使用-或+在function关键字之前使用的案例.
当您有一个表达式求值函数时,可以使用()运算符调用该函数.
另一种(可能更容易理解)实现保存相同效果的方法是使用另一组括号:
( function(x) { body; } )(arg);
Run Code Online (Sandbox Code Playgroud)
通过将函数放在括号内,您再次将其转换为表达式,该表达式求值为函数.使用此函数arg作为参数调用.
| 归档时间: |
|
| 查看次数: |
50644 次 |
| 最近记录: |