在阅读技术教育文章时,我偶然看到了作者的这个示例代码。这些功能的内容并不是我所好奇的,一切都如作者所描述的那样起作用。
让我着迷的是将函数包装在匿名函数中(我认为这就是他们所做的)。用我微薄的知识,我唯一能看到的就是它创建了一个分组/容器。
为什么会这样,我应该养成一个习惯吗。我了解下半部分可能是主观的,因此如果太过钝则可以忽略。
(function ()
{
FuncName1 = function (var1, var2, var3)
{
....code n stuff....
}
FuncName2 = function (var1, var2)
{
.....code n stuff...
}
})();
很好的解释大家。谢谢。因此,我接下来的问题是,是否不应该将每个函数都包装起来?例如,作者将两个函数包装在一个“作用域或模块”中。那些不能互相泄漏吗?
因此,cookie怪物使作者的代码更好,我将这样做:
(function ()
{
var FuncName1 = function (var1, var2, var3)
{
....code n stuff....
}
var FuncName2 = function (var1, var2)
{
.....code n stuff...
}
})();
正如您在评论中所说的那样,关键是通过使用关键字var使它们保持在包含匿名功能的范围内。不使用var会导致隐式全局范围。
最佳答案
就像上面说的那样,它创建了模块化代码。如果您将匿名函数设置为返回“事物”,并将其设置为变量,则您将获得一个闭包,其名称间隔为善良。
var name = (function() {
var
lastName = 'Moody',
firstName = Hank
;
return {
setName: function(newFirstName, newLastName) {
firstName = newFirstName;
lastName = newLastName;
},
getName: function() { return firstName + " " + lastName; }
}
}());
现在,您可以获取并设置代码,它位于自己的范围内! Bam-模块化设计模式。
name.setName('Clark', 'Kent');
console.log(name.getName); // Will now output Clark Kent
非常强大和简单的设计模式。
更新:
几乎忘了最重要的名字-IIFE或立即调用的函数表达式!