对象创建和函数调用的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:是的,但是公平的警告,规范中使用的术语和符号很难阅读,除非你真正从外部研究符号位。特别是,不要让人觉得其中包含冒号(:
)。没有,只是现在使用的符号定义了术语CallExpressionfoo()
是一个调用表达式(注意这里没有冒号)。就像你可能会写“汽车:一种通常有四个轮子和一个封闭车厢的普通汽车”。@T.J.Crowder你能得到一个CallExpression的例子:CallExpression参数
。很难想象。@St.Antario:foo(“bar”)
和OP要求的链接:@T.J.Crowder非常感谢,这就是我需要的!但我还有一个问题:当解释器找到这样的标记时,CallExpression:MemberExpression Arguments
11.2.3的步骤将被执行,这是真的吗?@St.Antario:是的,但是公平的警告,规范中使用的术语和符号很难阅读,除非你真正从外部研究符号位。特别是,不要让人觉得其中包含冒号(:
)。没有,只是现在使用的符号定义了术语CallExpressionfoo()
是一个调用表达式(注意这里没有冒号)。就像你可能会写“汽车:一种通常有四个轮子和一个封闭车厢的普通汽车”。@T.J.Crowder你能得到一个CallExpression的例子:CallExpression参数
。很难想象。@St.Antario:foo(“bar”)