「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。
闭包的作用是间接访问一个变量或隐藏变量,如果使用全局变量,则有被篡改的风险
function fn(){
let name = 'jack'
return function(){
console.log(name)
}
}
let fn2 = fn()
fn2()
闭包的缺点是消耗内存,影响页面性能
声明一个匿名函数并立即执行,即立即执行函数IIFE(Immediately Invoked Function Expression)
立即执行函数的作用是创建独立的作用域(私有变量)
一个例子:为了不打印出5个6,需创造局部变量,用立即执行函数和let都可以实现
for (var i = 1; i < 6; i++){
!function(j){
setTimeout(()=>console.log(j), 0)
}(i)
}
常用的创建立即执行函数的方法
// 创建 IIFE 的方法
(function() {
alert("Parentheses around the function");
})();
(function() {
alert("Parentheses around the whole thing");
}());
!function() {
alert("Bitwise NOT operator starts the expression");
}();
+function() {
alert("Unary plus starts the expression");
}();