像这样的代码块在Chrome控制台和repl中产生一个值
{
let x = 1;
for (let i = 1; i < 10; i += 1) {
x *= i;
}
x;
}
是否可以将块的结果赋给变量?
这将抛出一个错误,因为{}
在这里被解释为对象
const a = {
let x = 1;
for (let i = 1; i < 10; i += 1) {
x *= i;
}
x;
}
像这样的代码块在Chrome控制台和repl中产生一个值
{
let x = 1;
for (let i = 1; i < 10; i += 1) {
x *= i;
}
x;
}
是否可以将块的结果赋给变量?
这将抛出一个错误,因为{}
在这里被解释为对象
const a = {
let x = 1;
for (let i = 1; i < 10; i += 1) {
x *= i;
}
x;
}
4条答案
按热度按时间m3eecexj1#
JavaScript不像其他语言那样有块表达式。正如你所注意到的,它变成了一个对象/错误。
你可以做的是使用一个IIFE并从它返回一个值。
由于
const
和let
具有比var
更健壮的作用域规则,因此块的点数大大增加。它也将与新的using
支持有用。bybem2ql2#
你必须写一个函数,或者类似的东西。
1u4esq0p3#
它似乎像eval工程(我知道eval是邪恶的)
neekobn84#
我想任何人都可以享受这个简单的
call
功能。你可以把它重命名为block
,如果它能帮助你用这些术语思考的话-当使用
call
和递归函数时,如果可以提前确定结果,我们通常需要一种退出函数的方法。call
函数可以与callcc
或call with current continuation组合,最初在this Q&A中演示。这两个函数都可以是类型安全的-