gpt4 book ai didi

javascript - 定义并立即调用匿名函数如何解决命名空间问题?

转载 作者:行者123 更新时间:2023-11-29 19:43:10 25 4
gpt4 key购买 nike

我正在阅读 this page它说:

myNameSpace = function(){
var current = null;
function init(){...}
function change(){...}
function verify(){...}
return{
init:init,
change:change
}
}();

Instead of returning the properties and methods I just return pointers to them. This makes it easy to call functions and access variables from other places without having to go through the myNameSpace name.

但我不明白这是怎么回事。您仍然需要执行 myNameSpace.init() 来调用 init。单独使用 init() 是行不通的。

编辑:后来我想到,也许作者的意思是他们能够调用 init() 而无需限定 在匿名函数内。但是让我难过的是,作者之前的例子已经可以做到了。具体来说,在前面的示例中:

myNameSpace = function(){
var current = null;
function verify(){...}
return{
init:function(){...}
change:function(){...}
}
}();

她/他在返回它时定义了 init,而不是上面她/他首先定义 init 然后返回指向它的指针的示例。但在前面的示例中,在匿名函数中,如果您想调用 init() 而不必执行 myNameSpace.init(),您已经可以了。那么引用的示例如何更好?

谁能解释一下?谢谢。

最佳答案

使用函数清理范围的想法是,假设您有一个如下所示的程序:

var number = 10;
var multiplier = 2;
var endingText = " days left!";
var string = (10 * 2) + endingText;
// string is "20 days left!"

这是一个极其人为的例子,但希望它足够明显,这将在全局范围内声明四个变量,这太可怕了。假设您真正想要的是 string,但出于某种原因您仍然希望保留其他三个变量。您可以将它们放在匿名函数中,如下所示:

var string;
(function(){
var number = 10;
var multiplier = 2;
var endingText = " days left!";
string = (10 * 2) + endingText;
})();
// string is still "20 days left!"

因为变量是函数范围的,numbermultiplierendingText 没有在全局范围内声明。但是,您仍然可以使用它们来获得您最初想要的结果。

顺便说一句,如果你想立即调用一个函数,你需要用括号括起来。此外,您不应将其与命名空间混淆。 JavaScript 中的命名空间是为对象的属性分配有意义的值的想法。

var foo = {
hello: "goodbye",
frank: "bob"
};

hellofrankfoo 命名空间中声明。这里的所有都是它的。您发布的示例同时使用命名空间概念和立即调用函数概念来清理变量。

关于javascript - 定义并立即调用匿名函数如何解决命名空间问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21693338/

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