闭包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)
泡杯感冒灵 什么是立即执行函数,它有什么作用?