在下面的例子中,如何在addEventListener回调函数中使testvar
的新值可用?在下面的例子中,testvar
的值未定义。
var testvar;
setTimeout(function(){
var testvar = "testvar value";
}, 3000);
document.querySelector('#anotherButton').addEventListener('click', ()=>{
console.log('testvar '+testvar);
});
答案 0 :(得分:3)
testvar
的本地声明隐藏了全局声明。
var testvar = "Old value";
setTimeout(function(){
// Here just reuse the global declaration.
testvar = "testvar value";
}, 3000);
document.querySelector('#anotherButton').addEventListener('click', ()=>{
console.log('testvar: '+ testvar);
});

<button id="anotherButton">Click me!</button>
&#13;
答案 1 :(得分:2)
var testvar = ...
您刚刚声明了一个新的局部变量。 它与您从未设置的其他变量完全无关。
答案 2 :(得分:1)
您需要删除var
方法
setTimeout
符号
var testvar;
setTimeout(function(){
testvar = "testvar value";
}, 3000);
答案 3 :(得分:1)
声明的变量在声明它们的执行上下文中受到约束。
var testvar; // default value undefined
重新声明testvar 变量,其范围现在在该函数内
setTimeout(function(){
var testvar = "testvar value"; // testvar value and its scope is within this set
}, 3000);
因此,在setTimeout函数外,testVar变量值为 undefined
要实现预期,请删除var并使其成为全局testVar变量以返回值 - “testvar value”