Javascript关闭vs常规功能

时间:2017-07-07 06:39:27

标签: javascript closures

我正在阅读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,它不起作用。

好的,我知道这是让闭包有趣的原因,但为什么我的修改不起作用?

方面, 查尔斯。

1 个答案:

答案 0 :(得分:1)

onclick属性需要传递函数。在你的第二个例子中,makeSizer(12)不是函数,而是函数调用。要使它工作,你需要将它包装在一个匿名函数中,如:

document.getElementById('size-12').onclick = function() {makeSizer(12);};