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

我已经阅读了很多关于这个主题的内容,但我仍然不清楚......


如果 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 times

sum(); //'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



偶然的你
浏览 91回答 2
2回答

繁星点点滴滴

你那里没有IIFE。(和之间的代码)将函数分配给隐式全局变量sum。然后()after 它然后执行评估表达式的结果(这是同一个函数)。

德玛西亚99

您的示例代码没有明确声明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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript