我正在阅读javascript关闭的一个例子。还有一件事我不明白。
以下是例子:
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;
以下是完整示例:Fidle Exemple
我的理解是,当您点击元素大小-12为ex时,您将执行匿名函数,将大小更改为12。
我不明白的是,如果您以这种方式更改代码:
function makeSizer(size) {
document.body.style.fontSize = size + 'px';
}
并在点击事件中调用makeSizer(12)而不是size12,它不起作用。
好的,我知道这是让闭包有趣的原因,但为什么我的修改不起作用?
方面, 查尔斯。
答案 0 :(得分:1)
onclick
属性需要传递函数。在你的第二个例子中,makeSizer(12)
不是函数,而是函数调用。要使它工作,你需要将它包装在一个匿名函数中,如:
document.getElementById('size-12').onclick = function() {makeSizer(12);};