我已经阅读了很多关于这个主题的内容,但我仍然不清楚......如果 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第2部分:如果一个IIEF一旦被调用就消失了,那为什么我可以执行多次?(sum=function(){ console.log("random text");})();sum(); /*this can relaunch the function even "iief is only used once" + I can do that multiple timessum(); //'random text' 'random text' ...第 3 部分:为什么当我为 IIEF 命名时可以重新启动代码段?我到处读到,IIFE 只使用一次……一旦它们启动,它们就消失了……(function sum(){ console.log("random text");})();sum(); //I can execute the IIEF as many times as I wish however I shouldn't be able to
2 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
您的示例代码没有明确声明sum为变量,因此它是隐式的 global。基本上,如果它在脚本中处于全局级别,则您的代码将被解释为:
var sum = function(b) {
var a = 200;
return a+b;
};
sum();
console.log(sum(1000));
一般来说,IIFE 的目的是创建一个命名空间,最终可以小心地将其导出到有限数量(希望为 1)的全局符号。在函数的私有命名空间内,可以声明各种数据结构和函数并随着时间的推移对其进行操作,所有这些都与其他代码完全隔离。
我认为您的代码中的关键错误是假设有必要将匿名函数保存在某处。根据我的经验,这不是一件常见的事情。通常它看起来像:
(function(args) {
// code, possibly a whole lot
})(parameters);
添加回答
举报
0/150
提交
取消