javascript – 立即调用函数表达式(IIFE)与否
作者:互联网
我看到很多代码如下:
var myApp ={};
(function() {
console.log("Hello");
this.var1 = "mark"; //"this" is global, because it runs immediately on load. Caller is global
myApp.sayGoodbye = function() {
console.log("Goodbye");
};
})();
这导致匿名函数立即执行.但是,与仅将代码内联相比,这有什么优势呢?
var myApp ={};
console.log("Hello");
var1 = "mark";
myApp.sayGoodbye = function() {
console.log("Goodbye");
};
显然它与函数的范围有关,但由于函数是匿名的并且由窗口调用,它的范围(即这个)是全局的,不是吗?
解决方法:
通常,你会这样:
var myApp ={};
(function() {
console.log("Hello");
var var1 = "mark";
myApp.sayGoodbye = function() {
console.log("Goodbye");
};
})();
主要区别在于var1不会使全局命名空间混乱.在此调用之后,var1仍然与之前相同(通常是未定义的).
因为var1只能从闭包中定义的函数访问,所以它被称为“私有”.
除了避免可能的冲突原因之外,在没用时保持全局变量更加清晰.
在这里,您没有局部变量,而是一个定义为this.var1的全局变量.这可能是一个错误,或者原因可以在代码的其他地方找到.
标签:iife,javascript,design-patterns,anonymous-function 来源: https://codeday.me/bug/20190928/1825296.html