上次学习了js的作用域,其实理解还不太深刻,今天做的是js的闭包。
开始先说下函数的生命周期:
全局变量:全局变量的作用域是针对全局,在整个javascript中全局变量都是处处存在的。
局部变量:局部变量的作用域只能在函数内使用,函数运行完这个变量会被销毁。
function add() {
var counter = 0;
return counter += 1;
}
add();
add();
add();//调用三次函数,可是输出结果为1.
var add = (function () {
var counter = 0;
return function () {return counter += 1;
})();
add();
add();
add();//调用三次函数,输出结果为3
代码二中的函数自我调用了返回值,这个就是闭包,他使得函数的变量变成私有的,里面的变量不会受影响。
通常情况下,函数的作用域以及它所有的变量都会在函数执行完成以后销毁,可是闭包的可以保存变量一直到这个闭包不存在为止。
注意事项:内存泄漏,由于函数中的变量都保存在内存中,滥用闭包的的话会造成内存的消耗,如果不是必须,尽量避免使用闭包。