为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

偶然的你 2022-05-26 11:15:42
我已经阅读了很多关于这个主题的内容,但我仍然不清楚......如果 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 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

你那里没有IIFE。

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

然后()after 它然后执行评估表达式的结果(这是同一个函数)。


查看完整回答
反对 回复 2022-05-26
?
德玛西亚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);


查看完整回答
反对 回复 2022-05-26
  • 2 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信