Javascript - 为什么在每次调用时都不会重置此函数值

时间:2017-11-02 17:05:01

标签: javascript

我做了一个jsbin来证明我的意思。伯爵为何算数?我虽然每次调用一个函数都会重置所有内部变量。

http://jsbin.com/kilonepece/edit?html,js,console,output

function test(text) {
  var count = 0;

  return function() {
    console.log(text + ' ' + count);
    count++;
  }
}

document.getElementById('button').addEventListener('click', test('clicked'));

这会导致登录到控制台。

"点击0" "点击1" "点击2" "点击3" "点击4"

等等

2 个答案:

答案 0 :(得分:2)

每次调用test时,count都会重置。你正在做的是调用test一次并将返回的函数指定为事件处理程序。这使得事件处理程序的0值为count,然后在每次点击时递增该值。

count不是"内部"变量到闭包,只到你只调用一次的test函数。

答案 1 :(得分:-1)

这应该始终重置它。请尝试以下方法:

function test(text) {
    var count = 0;
    return function() {
    console.log(text + ' ' + count);
    count++;
}()
}
document.getElementById('button').addEventListener('click', test('clicked'));