gpt4 book ai didi

javascript - 短作用域命名空间数组是什么意思?

转载 作者:行者123 更新时间:2023-12-02 16:29:50 24 4
gpt4 key购买 nike

我有这个代码片段:

var ns;
(function(namespace, undefined) {
function privateFunction() { ... };
namespace.publicFunction = function() { ... };
}((ns = ns || {},
ns.foo = ns.foo || {})));

我知道未定义使其真正未定义。但是命名空间数组是如何工作的呢?它是否将全局函数和变量绑定(bind)到两个命名空间?

所以我们给出

(ns = ns || {},
ns.foo = ns.foo || {})

作为命名空间变量。如果 ns 或 ns.foo 已经存在,它将被实例化为空对象。我想。

另外,在代码中你可以看到私有(private)函数和公共(public)函数都以 ; 结尾,我什么时候使用 , ; ,什么也没有?

最佳答案

namespace 不是数组,namespace 是一个对象,存储在 foo 键下的全局 ns 对象中

(ns = ns || {},
ns.foo = ns.foo || {})

此代码使用空对象初始化 nsns.foo(如果它们之前初始化过)。然后 ns.foo 作为 namespace 变量进入函数输入。

由于 ns 是全局的,因此 ns 的所有属性都可以全局访问。因此我们可以通过以下方式访问函数作用域之外的公共(public)函数:

ns.foo.publicFunction

但是私有(private)函数只能在定义它们的作用域(以及子作用域)中访问。例如,我们可以在 publicFunction 中使用 privateFunction,但不能没有匿名父函数:

var ns;
(function(namespace, undefined) {
function privateFunction() { console.log('hello') };
namespace.publicFunction = function() { privateFunction(); };
}((ns = ns || {},
ns.foo = ns.foo || {})));
ns.foo.publicFunction(); // hello
privateFunction(); //ReferenceError: privateFunction is not defined
ns.foo.privateFunction(); //TypeError: undefined is not a function

至于分号,函数声明不需要它,这与函数作为语句不同:

function privateFunction() { ... }
var privateFunction = function(){ ... };

关于javascript - 短作用域命名空间数组是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28409942/

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