2020-04-30 简述闭包和立即执行函数

100 阅读2分钟

闭包closure

“函数”和“函数内部可以访问的外部变量”的总和,称为闭包。

怎么写

!function(){
  var local = "局部变量"
  function foo(){
    console.log(local);
  }
return foo;
}()

用立即执行函数包裹的原因是让local成为局部变量,因为闭包的作用便是隐藏一个变量(也叫间接访问一个变量),return的原因是让外部能访问闭包(不return就没法用这个闭包了)

使用场景

闭包通常用来创建内部变量,使得这些变量不能被外部随意修改,同时又可以通过指定的函数接口来操作。


立即执行函数IIFE: Immediately Invoked Function Expression

1.声明一个匿名函数

2.马上调用这个匿名函数

怎么写

(function(){
  console.log(111);
})()

!function(){
  console.log(111);
}()
//! ~ + - void new均可

有什么用

只有一个作用:创建一个独立的作用域。

这个作用域里面的变量,外面访问不到(即避免“变量污染”)。

使用场景

1.著名面试题: for循环中的i

2.你的代码在页面加载完成之后,不得不执行一些设置工作,比如时间处理器,创建对象等等。所有的这些工作只需要执行一次,比如只需要显示一个时间。但是这些代码也需要一些临时的变量,但是初始化过程结束之后,就再也不会被用到,如果将这些变量作为全局变量,不是一个好的注意,我们可以用立即执行函数——去将我们所有的代码包裹在它的局部作用域中,不会让任何变量泄露成全局变量。 立即执行函数的参数

(function(j){
  //代码中可以使用j
  console.log(j);//打印出i的值
})(i)

其中,i是你传进去的实参,j是形参(也就是i==j)


摘自方方知乎专栏 闭包 立即执行函数

泡杯感冒灵 什么是立即执行函数,它有什么作用?