控制台日志显示“活动”,但“blocks”变量仍为false,并在警报中显示“未激活”。
var blocks = false;
(function(){
var test = document.createElement('div');
test.innerHTML = ' ';
test.className = 'adsbox';
document.body.appendChild(test);
window.setTimeout(function() {
if (test.offsetHeight === 0) {
var blocks = true;
console.log("active");
} else {
var blocks = true;
console.log("not active");
}
test.remove();
}, 200);
})();
这里检查变量是否为真:
if (blocks) {
alert('active');
}else{
alert('not active');
}
为什么“阻止”总是假的?如何在函数后使用“阻塞”变量?
答案 0 :(得分:2)
您有两个名为block
的不同变量。
您传递给setTimeout
的匿名函数和一个全局函数。
从内部函数中删除var,这样就不会在窄范围内声明新变量(并掩盖对全局变量的访问)。
请注意,由于您的if (blocks)
语句似乎只是在代码的其余部分之后,因此进行上述修改以使全局变量得到修改将不会产生任何实际差异。在发生超时之前,您仍然会测试的值。
答案 1 :(得分:1)
您正在函数内部创建一个新的blocks
,而不是使用顶级的var
。从函数内部的var blocks = true
行中删除{{1}}。
答案 2 :(得分:0)
从您的作业中删除关键字var
。您正在本地范围中创建一个恰好具有相同名称的 new 变量。外部变量未分配。
答案 3 :(得分:0)
这是因为变量的范围。你有看起来像全局变量,块,然后你也有在每个分支中定义的局部变量块。您需要设置全局块的值,而不是创建新的本地块。