(旧)IIFE模仿块级作用域
Willem Zhang Lv5

IIFE

由于旧时ES5前没有块级作用域只有函数作用域,所以有了IIFE来模仿块级作用域。
没有块级作用域会导致在使用for等语句时,循环变量的作用域是函数作用域,导致函数中会有这个循环变量。
因此当在全局使用for语句时,全局作用域会被循环变量污染。IIFE就是为了解决这个问题而存在的。

模仿块级作用域就是利用函数作用域来模仿,通过定义一个及时执行的函数来生成一个函数作用域,然后将for等语句在这个函数中执行,for的循环变量就会被限制在这个函数作用里面,而不会外泄到全局变量。但是在这个即时执行函数中循环变量还是泄漏到了函数的局部作用域中。

1
2
3
4
5
6
7
(function() {

for (var i = 0; i <= 10, i++) {
console.log(i);
}

})();

在执行完IIFE后,如果IIFE中没有声明子函数,则其执行上下文会出栈,局部变量也会消失。
通过这种方式i不会影响到全局变量。

1
2
3
(function() {

})();

IIFE通过以上生成一个函数的方式生成一个函数作用域,var是被限制在函数作用域里面的。把这个IIFE函数的函数作用域当成一个伪块级作用域,于是用var声明的变量就被限制在了这个伪块级作用域里面。

  • Post title:(旧)IIFE模仿块级作用域
  • Post author:Willem Zhang
  • Create time:2021-11-21 15:31:49
  • Post link:https://ataraxia.top/2021/11/21/(旧)IIFE模仿块级作用域/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments