What do these double parentheses do in JS?
我正在读这本书
1 2 3 | (function(){ something here; })(); |
为什么我们需要将函数括在括号中?为什么我们之后再添加一对括号?
这个
1 2 3 | (function(){ alert('hello'); })(); |
虽然它是一个功能,它会自动调用,所以你不能/不能手动调用它
这些对于
这将失败,因为我将在5秒后等于9
1 2 3 4 5 | for(var i = 0; i < 10; i++) { window.setTimeout(function(){ console.log(i); }, 5000) } |
所以你可以做到这一点
1 2 3 4 5 6 7 | for(var i = 0; i < 10; i++) { (function(a){ window.setTimeout(function(){ console.log(a); }, 5000) })(i); } |
也适合创建像这样的"私人"范围
1 2 3 4 5 6 | (function(){ var test = 'hello'; console.log( test ); // 'hello' }()); console.log( test ); // 'undefined' |
它是一个自我调用函数,在脚本完成加载时调用它自己。您可以不带参数调用它,也可以向其添加参数,例如
你以jQuery使用它的方式使用它:
1 2 3 | (function( window, undefined ) { // jQuery code })(window); |
一个(几乎)替代语法来做同样的事情:
1 2 3 | ! function( window, undefined ){ // some code… }(window); |
欲了解更多信息,请访问:http://sarfraznawaz.wordpress.com/2012/01/26/javascript-self-invoking-functions/
最后一组括号使函数立即执行。无需在任何地方分配功能即可创建和执行功能。可能将代码包装在这样的函数中的原因是封装代码。以此为例:
1 2 | var myVar = 'whatever'; function shout() { alert(myVar); } |
这里,
1 2 3 4 | (function() { var myVar = 'whatever'; function shout() { alert(myVar); } })(); |
该模式还用于创建局部变量周围的闭包。请参阅循环内的JavaScript闭包 - 简单的实际示例。
它运行您刚刚创建的功能。这样做的原因是它包含了您在新范围内编写的所有代码。这意味着当您定义
简而言之,它封装了代码。
自我调用功能,基本上它自称是直接的。
通常用于传递像jQuery这样的变量,以确保
1 2 3 | (function($){ // $ now is equal to jQuery })(jQuery); |