我看到很多这样的代码:
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");
};
显然这与函数的作用域有关,但由于该函数是匿名的并由窗口调用,所以它的作用域(即 this
)是全局的,不是吗?
最佳答案
通常,你会有这个:
var myApp ={};
(function() {
console.log("Hello");
var var1 = "mark";
myApp.sayGoodbye = function() {
console.log("Goodbye");
};
})();
主要区别在于 var1
不会使全局命名空间困惑。这次调用后,var1
还是和之前一样(一般是undefined)。
因为 var1
只能从闭包中定义的函数访问,所以它被称为“私有(private)”。
除了避免可能的冲突原因之外,在无用时不要保留全局变量更清洁。
在这里,您没有局部变量,而是定义为 this.var1
的全局变量。这可能是一个错误,或者可以在代码的其他地方找到原因。
关于javascript - 立即调用函数表达式 (IIFE) 与非立即调用函数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14317998/