javascript闭包
一句话:有权访问另一个函数作用域内变量的函数都是闭包。
有权访问另一个函数作用域内变量的函数都是闭包。
有权访问另一个函数作用域内变量的函数都是闭包。
说三遍的都是真理!
不多说看代码:
function a() {
var b = 0;
function c() {
alert(b++);
}
return c;
}
var d = a();
d();//b=0;
d();//b=1;
如上是一层嵌套,下面是两层:
function a() {
var b = 0;
function c() {
function f() {
alert(b++);
}
return f;
}
return c;
}
var d = a();
d();
d();
浏览器并没有弹窗而是打印出了
function f() {
alert(b);
}
而把 b(); 改成 b()(); 则可以正常反应。
* ()是指执行函数的意思。
//2016/8/11更新
function makeSizer(size) { return function() { document.body.style.fontSize = size + 'px'; }; } var size12 = makeSizer(12); var size14 = makeSizer(14); var size16 = makeSizer(16); document.getElementById('size-12').onclick = size12; document.getElementById('size-14').onclick = size14; document.getElementById('size-16').onclick = size16; <a href="#" id="size-12">12</a> <a href="#" id="size-14">14</a> <a href="#" id="size-16">16</a>
结果很显然无论怎么点击都是16px的字体,因为size在makeSize中是一个单独的变量,他只会有一个值,而在makeSize的return中加入变量才是正确的
浙公网安备 33010602011771号