gpt4 book ai didi

javascript - 为什么使用设置为方法时函数语句不创建函数?

转载 作者:行者123 更新时间:2023-11-28 13:30:36 25 4
gpt4 key购买 nike

我遇到了以下行为:

> foo = {};
{}
> foo.bar = function bar() { return arguments; }
[Function: bar]
> bar()
ReferenceError: bar is not defined
at repl:1:2
at REPLServer.self.eval (repl.js:110:21)
at Interface.<anonymous> (repl.js:239:12)
at Interface.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:760:14)
at ReadStream.onkeypress (readline.js:99:10)
at ReadStream.emit (events.js:98:17)
at emitKey (readline.js:1095:12)

bar 不应该是当前作用域中的函数吗?

添加[var] bar =解决了问题:

> bar = foo.bar = function bar() { return arguments; }
[Function: bar]
> bar(1)
{ '0': 1 }

但是为什么在没有分配给 bar 的情况下它不起作用?

最佳答案

您使用函数关键字的上下文(在赋值的右侧)使其成为 function expression ,不是function declaration .

function() 之间放置名称使其成为命名函数,但由于它不是函数声明,因此不会在当前作用域中创建变量.

请注意,命名函数表达式有 memory leak issues在旧版 IE 中。

关于javascript - 为什么使用设置为方法时函数语句不创建函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25288540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com