我做了一个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"
等等
答案 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'));