Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将块的结果赋给变量(给出SyntaxError)_Javascript - Fatal编程技术网

Javascript 将块的结果赋给变量(给出SyntaxError)

Javascript 将块的结果赋给变量(给出SyntaxError),javascript,Javascript,如果我打开一个节点REPL并输入此代码,我可以看到它的计算结果为3: $ node > { let a = 1 + 2; a } 3 > 但是,此代码不起作用: const result = { let a = 1 + 2; a }; 我得到这个错误: const result = { let a = 1 + 2; a }; ^ SyntaxError: Unexpected identifier 我错过了什么?我是否正确地假设块计

如果我打开一个节点REPL并输入此代码,我可以看到它的计算结果为3:

$ node
> { let a = 1 + 2; a }
3
> 
但是,此代码不起作用:

const result = { let a = 1 + 2; a };
我得到这个错误:

const result = { let a = 1 + 2; a };
                     ^

SyntaxError: Unexpected identifier

我错过了什么?我是否正确地假设块计算为其中的最后一个表达式,或者节点的REPL在这里误导了我?

在js大括号中表示一个需要键:值对的对象。你可以得到这样的结果

const result={a:1+2};
控制台.logresult.a 弗拉兹在评论中解释说:


块是不相关的。您永远无法从块本身中获取值—在表达式上下文中不可能有代码块。REPL日志是为了方便起见,它似乎选择了最后一条语句。这与同样不产生任何值的变量声明没有什么不同——它们是语句,因此在表达式上下文中也是无效的。然而,控制台将记录未定义,以至少确认代码已被处理

换句话说,节点REPL具有误导性。它给人的印象是一个块的计算结果是一个值,但实际上,它不是。这只是一个REPL特性/错误

有趣的是,有。目前,它没有在任何地方实施。该提案允许您使用以下do关键字:

让x=do{ 设tmp=f; tmp*tmp+1 };
如果您以{开头,这是一个块,如果您有varName={这是一个对象文字。您将块语句视为对象。这不起作用。为什么Node会说块的计算结果是什么?如果我必须扔掉它,我如何利用块的计算结果?块是不相关的。您永远无法从块本身获得值-表达式上下文中没有代码块t、 REPL记录的内容是为了方便起见-它似乎选择了最后一条语句。这与同样不产生任何值的变量声明没有什么不同-它们是语句,因此在表达式上下文中也是无效的。但是控制台将记录未定义的内容,以至少确认代码已被处理。@Flimm One可以使用eval获取块或任何其他语句的最后一个完成值。这也是控制台执行此操作的方式。但是,您不应该使用此选项。请您解释一下我的答案中的错误。谢谢!我没有否决。我的问题是关于如何获得计算a的结果,a也由大括号表示。我不是问对象文字。