我在看书secrets of the js ninja
,经常看到这样的代码
(function(){
something here;
})();
为什么我们需要将函数括在括号中,为什么我们要在这之后再添加一对括号?
我在看书secrets of the js ninja
,经常看到这样的代码
(function(){
something here;
})();
为什么我们需要将函数括在括号中,为什么我们要在这之后再添加一对括号?
它是一个自调用函数,在脚本完成加载时调用它的自身。您可以不带参数调用它,也可以向它添加参数,例如window
or document
。
您以 jQuery 使用它的方式使用它:
(function( window, undefined ) {
// jQuery code
})(window);
一种(几乎)替代语法来做同样的事情:
! function( window, undefined ){
// some code…
}(window);
阅读更多:http ://sarfraznawaz.wordpress.com/2012/01/26/javascript-self-invoking-functions/
这个
(function(){
alert('hello');
})();
虽然它是一个函数,但它是自动调用的,所以你不能/不能手动调用它
for
这些对于像这样的循环很有用
这将失败,因为 5 秒后 i 将等于 9
for(var i = 0; i < 10; i++) {
window.setTimeout(function(){
console.log(i);
}, 5000)
}
所以你可以这样做
for(var i = 0; i < 10; i++) {
(function(a){
window.setTimeout(function(){
console.log(a);
}, 5000)
})(i);
}
也适合创建这样的“私人”范围
(function(){
var test = 'hello';
console.log( test ); // 'hello'
}());
console.log( test ); // 'undefined'
最后一组括号使函数立即执行。创建并执行一个函数,而无需在任何地方分配它。人们可能将他们的代码包装在这样的函数中的原因是为了封装代码。以此为例:
var myVar = 'whatever';
function shout() { alert(myVar); }
到这里,myVar
又shout
刚刚变成了全局变量。您可以打开控制台并输入window.myVar
or window.shout
,您将能够访问和更改这些变量。通过将其包装在一个函数中,这些变量对于外部函数仍然是本地的:
(function() {
var myVar = 'whatever';
function shout() { alert(myVar); }
})();
window.myVar
并且window.shout
是未定义的。唯一存在于该函数内部。
该模式还用于围绕局部变量创建闭包。请参阅循环内的 JavaScript 闭包——简单实用的示例。
自调用函数,基本上是直接调用自己。
通常用于传递像 jQuery 这样的变量,以确保它$
是真正的 jQuery 对象!
(function($){
// $ now is equal to jQuery
})(jQuery);
它运行您刚刚创建的函数。这样做的原因是它将您编写的所有代码都包含在一个新的范围内。这意味着当您定义vars
and时functions
,它们将保持在function()
您刚刚创建的范围内。
简而言之,它封装了代码。