gpt4 book ai didi

javascript - 为什么 '(function a() {})'不把 'a'放到全局对象中呢?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:38:07 25 4
gpt4 key购买 nike

answering另一个问题,我正在使用这种模式递归调用函数:

(function() {
// ...
if(should_call_again) arguments.callee();
})();

有效。我得到的反馈是命名该函数也有效:

(function func() {
// ...
if(should_call_again) func();
})();

然而,使用这种技术,window.funcundefined,这让我感到惊讶。

如果我简单地说,我的问题是:为什么以下是正确的?

function a() {}
typeof window.a; // "function"

(function b() {})
typeof window.b; // "undefined"

b 仍然可以在内部 b 本身访问。所以看起来 ( ) 创建了另一个作用域,但事实并非如此,因为只有函数创建了另一个作用域,而我只是将它包装在 ( ) 中。

那么为什么将函数包装在 ( ) 中而不是将函数放入全局对象中呢?

最佳答案

因为你不是在写一个函数声明,而是一个函数表达式

在函数 表达式 中定义的函数只有在您将它们分配给变量时才会存储在某个地方;你没有那样做;你只是立即调用它。


在[非常宽松!]的意义上,您可以将函数声明视为一种特殊形式的函数表达式赋值:

function a() {}
// vs:
var a = function() {};

这仍然不是严格准确的比较,但它可能有助于理解函数声明是一种特殊的东西。

关于javascript - 为什么 '(function a() {})'不把 'a'放到全局对象中呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065021/

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