闭包
变量的作用域:全局变量和局部变量
Js函数内部可以读取全局变量,函数外部无法读取函数内的局部变量 函数内部声明变量一定要用var等命令,如果不用,则是全局变量。
var n=99
function f1(){
console.log(n);
}
f1();//99
闭包(closure):能够读取其他函数内部变量的函数
定义在一个函数内部的函数,闭包是函数内部和函数外部链接起来的桥梁 所读取到的变量值始终保存在内存中
注意: 1.闭包会使得函数中的变量都被保存在内存中,内存消耗大,不能滥用,否则会造成网页性能问题,导致内存泄漏 解决方法:在退出函数之前,将不使用的局部变量全部删除。
2.闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法,把内部变量当作它的私有属性,这时一定要小心,不要随便改变父函数内部变量的值。
for (var i = 1; i <= 5; i++) {
(function(i){
setTimeout( function timer() {
console.log(i);
}, 1000 );
})(i);
}
for (let i = 1; i <= 5; i++) {
setTimeout( function timer() {
console.log(i);
}, 1000 );
}
//闭包不一定要return
(function (){
var a = 10;
add.onclick = function (){
a++;
span.innerHTML = a;
}
})()