【问题标题】:Why won't false become true?为什么假的不会变成真的?
【发布时间】:2014-07-22 19:27:53
【问题描述】:

我正在开发一款游戏,出于某种原因,这些点击功能不会将顶部值永久更改为 true,我使用控制台日志对其进行测试,底部日志始终显示为 false。我知道这可能很简单,但谁能告诉我?

var twoThree = false;
var fourFive = false;
var sevenEight = false;

// button click functions
$('#2_3').click(function(){
  twoThree = true;
  $('#start').hide();
  $('#game').fadeIn('slow');
});
$('#4_5').click(function(){
  var fourFive = true;
  $('#start').hide();
  $('#game').fadeIn('slow');
});
$('#7_8').click(function(){
  var sevenEight = true;
  $('#start').hide();
  $('#game').fadeIn('slow');
});
console.log(twoThree);

【问题讨论】:

  • 为什么在全局声明 var fourFivesevenEight 后又用 var 声明它们?只需在处理程序中初始化它
  • 德克,你会说这个问题得到了回答吗?

标签: javascript syntax boolean conditional


【解决方案1】:

问题是您使用关键字 var 分配变量。这是在函数范围内声明一个新变量并将其设置为 true。 在函数的子句上设置变量的方法必须是通过窗口变量o 只使用变量名。

这两个调用都可以。

window.fourFive = true;
fourFive = true;

这不是。

var fourFive = true; // Is a local variable of the function

【讨论】:

    【解决方案2】:

    您在函数内部使用 var 会在该范围内创建一个新变量,因此外部范围内的值不会更改。

    【讨论】:

    • twoThree 变量没有使用 var,这就是我正在测试的,仍然显示为 false。
    • 示例中的控制台日志在单击事件之前运行。尝试在操作发生后将其移动到单击事件中。这里要记住的是,JS 是一种异步语言,所以它并不总是按顺序运行。
    • 为什么?这只是代码的自然顺序吗?
    • 编辑了我之前的评论以包含答案。在单击 DOM 项之前,不会触发单击函数。
    • 嗨,克里斯,我不得不质疑你的说法,即“JS 是一种异步语言”。 JavaScript 无论如何都不是异步的。某些 JavaScript 库和 Web 浏览器集成是异步的,但语言本身不是。除了客户端 Web 编程之外,JavaScript 还有许多用途。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2017-02-20
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多