在javascript中,什么时候你想使用这个:
(function(){
//Bunch of code...
})();
在这:
//Bunch of code...
在javascript中,什么时候你想使用这个:
(function(){
//Bunch of code...
})();
在这:
//Bunch of code...
当前回答
自执行函数用于管理变量的作用域。
变量的作用域是程序中定义变量的区域。
全局变量具有全局作用域;它在JavaScript代码中的任何地方都有定义,并且可以从脚本中的任何地方访问,甚至在函数中。另一方面,在函数中声明的变量只能在函数体中定义。 它们是局部变量,具有局部作用域,并且只能在该函数中访问。函数参数也算作局部变量,只在函数体中定义。
如下所示,您可以在函数中访问全局变量变量,并注意在函数体中,具有相同名称的局部变量优先于全局变量。
var globalvar = "globalvar"; // this var can be accessed anywhere within the script
function scope() {
alert(globalvar);
var localvar = "localvar"; //can only be accessed within the function scope
}
scope();
因此,基本上,自执行函数允许编写代码,而无需考虑其他javascript代码块中的变量如何命名。
其他回答
自我调用(也称为 自动调用)是当一个函数 立即执行 定义。这是一个核心模式 它是许多人的基础 JavaScript的其他模式 发展。
我是它的超级粉丝:)因为:
它使代码减至最少 它实现了行为与表示的分离 它提供了一个闭包,可以防止命名冲突
(为什么你要说它是好的?)
它是关于一次定义和执行一个函数。 你可以让这个自动执行的函数返回一个值,并将该函数作为参数传递给另一个函数。 它有利于封装。 它也适用于块作用域。 是的,你可以把你所有的.js文件封装在一个自动执行的函数中,并且可以防止全局命名空间污染。;)
更多的在这里。
是否有一个参数和“一串代码”返回一个函数?
var a = function(x) { return function() { document.write(x); } }(something);
关闭。something的值被赋给a的函数使用。something可以有一些变化的值(for循环),每次a都有一个新函数。
一个区别是,你在函数中声明的变量是局部的,所以当你退出函数时,它们就消失了,并且它们不会与其他或相同代码中的其他变量冲突。
此方法用于闭包。有关闭包的更多信息,请阅读此链接。
下面是一个实例,说明了自我调用匿名函数的用处。
for( var i = 0; i < 10; i++ ) {
setTimeout(function(){
console.log(i)
})
}
输出:10,10,10,10…
for( var i = 0; i < 10; i++ ) {
(function(num){
setTimeout(function(){
console.log(num)
})
})(i)
}
输出:0,1,2,3,4…