JS自动执行关闭:当IIFE内部存在冲突声明时会发生什么?

时间:2016-08-07 19:26:45

标签: javascript closures iife

我正在经历JavaScript allonge#six并且来到这个例子(每行代码后的简短评论):

((PI) => {             //1 - Outer - PI = 3.14 
   ((PI) => {})(100);   // 2 - IIFE (LOCAL)  PI = 100


  // ((PI) => PI)(100) // alternative1 = LOCAL PI = 100
 //  ((PI) => {return PI;})(100) // alternative2 - LOCAL PI = 100

  return (diameter) => diameter * PI;  // 3 - PI = 3.14
})(3.14)(2)

在所有这些情况下,外部函数中为PI限定的参数将直接传递给return语句,从而忽略IIFE。唯一可以影响" PI"参数是将return语句更改为:

((PI) => (diameter) => diameter * PI)(100)

首先问:除了这种情况下的闭包之外,还有另一种方法来遮蔽PI参数(在外部函数上绑定的那个)吗?

此外,我逐行通过谷歌开发者控制台运行代码,并在代码中找到了一个点,其中IIFE中的PI值被覆盖""尽管之前已被限制为100,但仍为3.14 PI inside the IIFE gets overwritten to 3.14 DESPITE BEING BOUNDED TO 100 previously

第二个问题:

IIFE在执行后会发生什么情况,在什么时候将其PI值覆盖到3.14?

1 个答案:

答案 0 :(得分:1)

我发现很难弄清楚你究竟在问什么。所以我只是重新组织了代码并添加了我自己的评论,试图让自己更清楚,并希望回答你的一些问题。

.mask {
    z-index: 999; /* change this accordingly--must be less than .pushmenu's z-index */
}
.pushmenu {
    overflow-y: auto;
}

随时可以使用名称和参考资料提出更多相关问题,以便我在同一页面上。