我知道你会认为这是重复的,但我通过许多相关帖子找到的是人们用未受过教育的“不”来淹没每个人,我很高兴这里还没有发生。无论哪种方式,我想重新讨论这个问题。
让我们看一下“不为人知的”let
陈述:
function foo()
{
var bar = 5;
if(true)
{
let bar = 10;
alert(bar);
}
alert(bar);
}
此功能将首先提醒10
,然后提醒5
。
这是因为bar = 5
位于功能级别范围,而bar = 10
的重新分配仅保留在块级范围中,谢谢我们的小伙伴let
。
说到这里,JavaScript中的块级范围肯定存在,但我们如何访问它呢?
以例如:
var arr = [
{
label: "x"
},
{
label: "y"
},
{
label: "z"
},
];
var randIdx = Math.floor(Math.random() * 3);
for(var i = 0; i < arr.length; i++)
{
if(i === randIdx)
arr[i].value = true;
else
arr[i].value = false;
}
function foo()
{
if(arr[0] || arr[1] || arr[2])
{
alert((\*passing argument*\).label);
}
}
foo();
必须能够访问当前if
语句的块范围并检索给定表达式的传递参数! 块级别范围确实存在,所以为什么我不能修补它!
谢谢!
答案 0 :(得分:5)
不,这是不可能的。 if
statement定义为
制作 IfStatement :
if
(
表达式)
声明 评估如下:
正如您所看到的,GetValue( exprRef )的结果不会存储在任何地方,因此您无法在以后检索它。
相反,请考虑将条件表达式分配给变量:
var myVar;
if(myVar = SomeFunction()) {
myVar; // value returned by `SomeFunction`
}
var myVar;
if(myVar = (x || y || z)) { // Parentheses added for clarity
myVar; // `x`, `y` or `z`
}