我知道你会认为这是重复的,但我通过许多相关帖子找到的是人们用没有受过教育的"不"来淹没每个人,我很高兴这里还没有发生.无论哪种方式,我想重新讨论这个问题.
让我们举例说一下"不为人所知"的let陈述:
function foo()
{
var bar = 5;
if(true)
{
let bar = 10;
alert(bar);
}
alert(bar);
}
Run Code Online (Sandbox Code Playgroud)
此功能将首先发出警报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();
Run Code Online (Sandbox Code Playgroud)
必须可以访问当前语句的块作用域if并检索给定表达式的传递参数!块级范围确实存在,为什么我不能修补它!
谢谢!
不,这是不可能的.该if声明被定义为
生产IfStatement:
if(Expression)语句 的计算方法如下:
如您所见,GetValue(exprRef)的结果不会存储在任何位置,因此您以后无法检索它.
相反,请考虑将条件表达式分配给变量:
var myVar;
if(myVar = SomeFunction()) {
myVar; // value returned by `SomeFunction`
}
Run Code Online (Sandbox Code Playgroud)
var myVar;
if(myVar = (x || y || z)) { // Parentheses added for clarity
myVar; // `x`, `y` or `z`
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |