-3

这是我的代码:

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) 为,然后等于x
在循环中它将写入 10 次
,有两个假设:

  • 首先:它将在循环中执行 if 命令 10 次以获得x的最终值
  • 第二:如果命令只执行一次,它会在第一次进入x时执行,并且在循环中x将只是一个包含true

    的变量, 哪个是 true?
    谢谢
4

1 回答 1

2

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

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)) ;
}

然后它会评估每个电话

于 2014-09-03T13:21:55.233 回答