对象创建和函数调用的JavaScript步骤

对象创建和函数调用的JavaScript步骤,javascript,Javascript,让我们有一个简单的脚本片段: var foo=function(){ return 'a'; };//1 var bar={prop:foo()};//2 alert(bar.prop);//3 函数代码在哪一行执行?2点还是3点?如果可能,请给我一个规格证明/链接 当解释器找到\u时,是否会调用一些内部方法[[Call]] 第1行是定义foo的地方。第2行是调用它的地方。在第2行 第1行是定义foo的地方。第2行是调用它的地方。考虑以下示例 var foo=function(){retur

让我们有一个简单的脚本片段:

var foo=function(){ return 'a'; };//1
var bar={prop:foo()};//2
alert(bar.prop);//3
函数代码在哪一行执行?2点还是3点?如果可能,请给我一个规格证明/链接

当解释器找到
\u时,是否会调用一些内部方法
[[Call]]

第1行是定义foo的地方。第2行是调用它的地方。

在第2行


第1行是定义foo的地方。第2行是调用它的地方。

考虑以下示例

var foo=function(){return'a
;}; var bar={prop:foo()};//在这里调用foo,并将“a”分配给bar.prop document.body.innerHTML+=bar.prop; var baz={prop:foo};//foo被分配给baz.prop
document.body.innerHTML+=baz.prop();//这里调用foo
请考虑以下示例

var foo=function(){return'a
;}; var bar={prop:foo()};//在这里调用foo,并将“a”分配给bar.prop document.body.innerHTML+=bar.prop; var baz={prop:foo};//foo被分配给baz.prop
document.body.innerHTML+=baz.prop();//foo在这里被调用
2,但我不确定你为什么需要任何证据——这很明显!当然是两点钟。您可以通过在函数名后放置
()
来调用函数。当使用
()
调用函数时,会运行该函数。因此,
foo()
正在第2行上运行
bar.prop
被设置为一个字符串,而不是一个函数。@jamice这对我来说并不明显。我正在更新我的问题。2,但我不知道你为什么需要任何证据-这很明显!当然是两点钟。您可以通过在函数名后放置
()
来调用函数。当使用
()
调用函数时,会运行该函数。因此,
foo()
正在第2行上运行
bar.prop
被设置为一个字符串,而不是一个函数。@jamice这对我来说并不明显。我正在更新我的问题。OP要求的链接是:@T.J.Crowder非常感谢,这就是我需要的!但我还有一个问题:当解释器找到这样的标记时,
CallExpression:MemberExpression Arguments
11.2.3的步骤将被执行,这是真的吗?@St.Antario:是的,但是公平的警告,规范中使用的术语和符号很难阅读,除非你真正从外部研究符号位。特别是,不要让人觉得其中包含冒号(
)。没有,只是现在使用的符号定义了术语CallExpression
foo()
是一个调用表达式(注意这里没有冒号)。就像你可能会写“汽车:一种通常有四个轮子和一个封闭车厢的普通汽车”。@T.J.Crowder你能得到一个CallExpression的例子:
CallExpression参数
。很难想象。@St.Antario:
foo(“bar”)
和OP要求的链接:@T.J.Crowder非常感谢,这就是我需要的!但我还有一个问题:当解释器找到这样的标记时,
CallExpression:MemberExpression Arguments
11.2.3的步骤将被执行,这是真的吗?@St.Antario:是的,但是公平的警告,规范中使用的术语和符号很难阅读,除非你真正从外部研究符号位。特别是,不要让人觉得其中包含冒号(
)。没有,只是现在使用的符号定义了术语CallExpression
foo()
是一个调用表达式(注意这里没有冒号)。就像你可能会写“汽车:一种通常有四个轮子和一个封闭车厢的普通汽车”。@T.J.Crowder你能得到一个CallExpression的例子:
CallExpression参数
。很难想象。@St.Antario:
foo(“bar”)