- 闭包
闭包的作用:隐藏变量,避免全局污染;可以读取函数内部的变量。
闭包的概念: 有一个A函数,在A函数内部返回一个B函数;在A函数外部有变量引用这个B函数;B函数内部访问着A函数内部的私有变量。(核心就是利用执行空间不销毁的原理)
写法1:注意输出结果的不同
for(var i=0;i<10;i++){
~function(){
setTimeout(()=>{
console.log(i);//10次10 获得执行次数
},1000)
}(i);
}
for(let i=0;i<10;i++){
~function(){
setTimeout(()=>{
console.log(i);//0~9 获得每一个i
},1000)
}(i);
}
写法2:注意输出结果的不同
for(var i=0;i<10;i++){
setTimeout(()=>{
return ~function(){
return console.log(i);//10次10 获得执行次数
}(i)
},1000)
}
for(let i=0;i<10;i++){
setTimeout(()=>{
return ~function(){
return console.log(i);//0~9 获得每一个i
}(i)
},1000)
}
写法3:用bind
// 可以 基于bind 的预先处理机制:
在循环的时候就把每一次执行的函数需要输出的结果, 预先传给函数即可。
for(var i=0;i<10;i++){
var fn = function(i){
console.log(i);//0~9 获得每一个i
}
setTimeout(fn.bind(null, i), 1000);
}
for(var i=0;i<10;i++){
var fn = function(){
console.log(i);//10次10 获得执行次数
}
setTimeout(fn.bind(null, i), 1000);
}