1、变量生命周期
全局变量的作用域是全局性的,即在整个JavaScript程序中,全局变量在函数内部和外部都可以访问。而在函数内部声明的变量,只在函数内部起作用。这些变量是局部变量,作用域是局部性的;函数的参数也是局部性的,只在函数内部起作用。
2、闭包的作用
变量有两种类型:全局变量和局部变量。如果定义过多的全局变量,有可能造成全局变量冲突,也就是全局变量污染问题,闭包可以避免全局变量的污染,隔离变量的运行环境。可以读取函数内部的变量。
3、闭包的特点及用法
1)闭包的特点
占用更多内存;不容易被释放,
2)闭包用法
变量想要反复使用,而且要避免全局变量污染,就要使用闭包,JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。闭包的用法如下:
先定义外层函数,封装被保护的局部变量。然后定义内层函数,执行对外部函数变量的操作。外层函数返回内层函数的对象,并且外层函数被调用,结果保存在一个全局的变量中。
例如,
var foo = ( function() {
var secret = 'secret';
// “闭包”内的函数可以访问 secret 变量,而 secret 变量对于外部却是隐藏的
return {
get_secret: function() {
// 通过定义的接口来访问 secret
return secret;
},
new_secret: function( new_secret ) {
// 通过定义的接口来修改 secret
secret = new_secret;
}
};
} () );
foo.get_secret(); // 得到 'secret'
foo.secret; // Type error,访问不能
foo.new_secret('cjavapy'); // 通过函数接口,修改了 secret 变量
foo.get_secret(); // 获得了 'cjavapy'