我已经阅读了很多有关此主题的内容,但对我来说仍然不清楚...
如果IIFE完全是关于隐私的(// +不会污染全局名称空间... //,那么为什么我可以使用函数参数来访问IIFE变量?结果将显示1200。
所以我不知道“ a”是200,所以我已经访问了它。这背后的逻辑是什么?如果所有人都说我不能,为什么我可以访问该变量?
(sum=function(b){
var a= 200;
return a+b;
})();
console.log(sum(1000)); //1200
console.log(a); //error as expected
Part2:如果IIEF被调用后就消失了,那么为什么我可以执行任意多次?
(sum=function(){
console.log("random text");
})();
sum(); /*this can relaunch the function even "iief is only used once" + I can do that multiple times
sum(); //'random text' 'random text' ...
您那里没有IIFE。
(
和)
之间的代码将函数分配给隐式全局变量sum
。
然后在()
之后执行sum
中存储的功能。
您的示例代码没有将sum
明确声明为变量,因此它是隐式全局。基本上,如果代码是在脚本的全局级别上,则代码将被解释为:
var sum = function(b) {
var a = 200;
return a+b;
};
sum();
console.log(sum(1000));
通常,IIFE的目的是创建一个命名空间,该命名空间最终可以小心地导出到有限数量(希望1)的全局符号中。