【问题标题】:implementation of if command in variablesif 命令在变量中的实现
【发布时间】:2014-09-03 13:12:21
【问题描述】:

这是我的代码:

var a=false;
var b=false;
var c=true;
var d=false;
//
var x = a ? a : (b ? b : (c ? c: false)) ;
//
for(i=0;i<11;i++){
    document.write(x);
}

内联 if 命令检查哪个变量 (a,b,c) 是 true 然后等于 x 到那个
并且在循环中它会写 10 次
有两个假设:

  • first:循环执行if命令10次,得到x的最终值
  • second:如果命令在第一次进入 x 时会执行一次,并且在循环中 x 将只是一个包含 true 的变量

    哪一个是真的?
    谢谢

【问题讨论】:

  • 异常运行未定义,问题难以理解,你在问什么? “运行”应该是“x”吗?
  • JavaScript 没有惰性求值。一切都会立即进行评估。希望对您有所帮助。
  • 这只是一个示例代码。
  • 这是一个语法错误,最后一个条件运算符缺少它的 else 部分。
  • 为什么不只是var x = a || b || c

标签: javascript variables inline-if


【解决方案1】:

无论如何它都包含一个错字,以确保它应该看起来像:

var x = a ? a : (b ? b : (c ? c: false)) ;

所以你可以像这样测试它:

var a=false;
var b=false;
var c=false;
var d=false;

var x = a ? a : (b ? b : (c ? c: "everything false")) ;


function runTest(){
    for(i=0;i<11;i++){
        console.log(x);
    }   
}

所以当你 runTest() 将记录“一切错误” 在控制台中更改变量 b=true,例如不刷新页面,所以你的场景和 runTest() 再次它仍然会打印“所有错误”

所以答案是

一旦 x 被赋值为表达式,x 是表达式的结果,而不是表达式本身,当你稍后打印 x 时,它仍然是相同的结果,即使现在的表达式会有所不同(因为一些全局变量发生了变化)

让 x 永远是“最新的”,让它成为一个函数

x = function () {
  return a ? a : (b ? b : (c ? c: false)) ;
}

然后它会在每次调用时进行评估

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多