检查javascript变量是否为true

时间:2016-09-02 13:29:27

标签: javascript

控制台日志显示“活动”,但“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');

}

为什么“阻止”总是假的?如何在函数后使用“阻塞”变量?

4 个答案:

答案 0 :(得分:2)

您有两个名为block的不同变量。

您传递给setTimeout的匿名函数和一个全局函数。

从内部函数中删除var,这样就不会在窄范围内声明新变量(并掩盖对全局变量的访问)。

请注意,由于您的if (blocks)语句似乎只是在代码的其余部分之后,因此进行上述修改以使全局变量得到修改将不会产生任何实际差异。在发生超时之前,您仍然会测试的值。

答案 1 :(得分:1)

您正在函数内部创建一个新的blocks,而不是使用顶级的var。从函数内部的var blocks = true行中删除{{1}}。

答案 2 :(得分:0)

从您的作业中删除关键字var。您正在本地范围中创建一个恰好具有相同名称的 new 变量。外部变量未分配。

答案 3 :(得分:0)

这是因为变量的范围。你有看起来像全局变量,块,然后你也有在每个分支中定义的局部变量块。您需要设置全局块的值,而不是创建新的本地块。