在javascript中,什么时候你想使用这个:
(function(){
//Bunch of code...
})();
在这:
//Bunch of code...
在javascript中,什么时候你想使用这个:
(function(){
//Bunch of code...
})();
在这:
//Bunch of code...
当前回答
命名空间。JavaScript的作用域是函数级的。
其他回答
一个区别是,你在函数中声明的变量是局部的,所以当你退出函数时,它们就消失了,并且它们不会与其他或相同代码中的其他变量冲突。
看起来这个问题已经有了答案,但我还是会发表我的意见。
我知道什么时候我喜欢使用自动执行函数。
var myObject = {
childObject: new function(){
// bunch of code
},
objVar1: <value>,
objVar2: <value>
}
该函数允许我使用一些额外的代码来定义childObjects的属性和属性,以获得更清晰的代码,例如设置常用的变量或执行数学方程;哦!或者错误检查。而不是局限于嵌套的对象实例化语法…
object: {
childObject: {
childObject: {<value>, <value>, <value>}
},
objVar1: <value>,
objVar2: <value>
}
一般来说,编码有很多晦涩的方法来做很多相同的事情,这让你想知道,“为什么要麻烦呢?”但是新的情况不断出现,您不能再仅仅依赖基本/核心原则。
首先你必须访问MDN IIFE,现在关于这一点有几点
这是立即调用的函数表达式。当你的javascript文件从HTML中调用这个函数时立即调用。 这防止了在IIFE习惯用法中访问变量以及污染全局作用域。
自执行函数用于管理变量的作用域。
变量的作用域是程序中定义变量的区域。
全局变量具有全局作用域;它在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代码块中的变量如何命名。
简单的回答是:防止全球(或更高)范围的污染。
IIFE(立即调用函数表达式)是将脚本编写为插件、附加组件、用户脚本或任何期望与其他人的脚本一起工作的脚本的最佳实践。这可以确保您定义的任何变量都不会对其他脚本产生不良影响。
这是另一种写IIFE表达式的方法。我个人更喜欢以下方法:
void function() {
console.log('boo!');
// expected output: "boo!"
}();
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void
从上面的例子可以很清楚地看出,IIFE也会影响效率和性能,因为原本预计只运行一次的函数实际上只执行了一次,然后就永远被丢弃了。这意味着函数或方法声明不会保留在内存中。