Javascript IIEF-如果无法访问任何变量,那么为什么可以通过函数访问它?

问题描述 投票:-1回答:1

我已经阅读了很多有关此主题的内容,但对我来说仍然不清楚...

如果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' ...
javascript iife
1个回答
0
投票

您那里没有IIFE。

()之间的代码将函数分配给隐式全局变量sum

然后在()之后执行sum中存储的功能。


0
投票

您的示例代码没有将sum明确声明为变量,因此它是隐式全局。基本上,如果代码是在脚本的全局级别上,则代码将被解释为:

var sum = function(b) {
  var a = 200;
  return a+b;
};
sum();
console.log(sum(1000));

通常,IIFE的目的是创建一个命名空间,该命名空间最终可以小心地导出到有限数量(希望1)的全局符号中。

© www.soinside.com 2019 - 2024. All rights reserved.