Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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块中作为对象键的函数和标记函数之间的语法冲突_Javascript_Javascript Objects_Labeled Statements - Fatal编程技术网

Javascript块中作为对象键的函数和标记函数之间的语法冲突

Javascript块中作为对象键的函数和标记函数之间的语法冲突,javascript,javascript-objects,labeled-statements,Javascript,Javascript Objects,Labeled Statements,假设您有一个同时支持和的浏览器,浏览器的标准方式/方法是什么来确定以下内容是一个名为L的属性为functionF的对象,还是一个包含标记为L的functionF的块: { L: function F(){} } 例如。 为了公开我的意思,下面是上述代码的两个不同副本,它们经过修改以将其公开为数组和函数: document.body.textContent=typeof(()=>{ L:函数F(){} })嗯。。。我认为: if(1){ // the brackets here bel

假设您有一个同时支持和的浏览器,浏览器的标准方式/方法是什么来确定以下内容是一个名为
L
的属性为function
F
的对象,还是一个包含标记为
L
的function
F
的块:

{
    L: function F(){}
}
例如。 为了公开我的意思,下面是上述代码的两个不同副本,它们经过修改以将其公开为数组和函数:

document.body.textContent=typeof(()=>{
L:函数F(){}
})嗯。。。我认为:

if(1){ // the brackets here belong to the if statement == block
    L: function F(){}
}
在这里:

console.log({ // the brackets represent JSON (javascript object notation) 
    L: function F(){}
})

这确实是一个具有“L”索引的对象,您可以将问题简化为:浏览器如何知道
{
是否启动块,以及何时启动对象文本

答案是,JS引擎会将
{
视为块的开始(如果它出现在语句位置),并将其视为对象文本的开始(如果它出现在表达式位置)

这就是为什么当
{}
出现在语句位置但需要对象时,必须在
{}
周围添加括号(
()

引入带标签的函数声明根本不会改变情况,因为情况已经不明确:

{
  foo: 42
}

再次查看规范,实际上指出了这种模糊性:

a不能以U+007B(左曲括号)开头,因为这可能会使它与a不明确


(语法也反映了这一点)

这并没有回答问题。您只是重述了示例。您似乎没有列出任何关于浏览器如何区分它们的信息(在第一段代码中).我确实同意上述答案更为详细。请在标准中的何处添加一条引文,以说明这一点。(我完全同意这一点,但我仍然对血腥的细节感到好奇)规范中没有这样写,但它遵循语法规则:。解析器只是尝试匹配规则。在顶部有一个脚本,它有一个脚本作为ScriptBody,它有一个语句列表,等等。箭头符号是一个例外。例如,使用箭头符号,if
()=>3
创建一个返回3的函数,然后在逻辑上
()=>{L:function F(){}
应该创建一个返回对象的函数。但不是这样,这意味着它必须更复杂。没有那么复杂,但确实,箭头函数有额外的规则:。主体可以是一个不以
{
开头的表达式,也可以是
{
后跟语句列表,后跟
}