在阅读技术教育文章时,我偶然看到了作者的这个示例代码。这些功能的内容并不是我所好奇的,一切都如作者所描述的那样起作用。

让我着迷的是将函数包装在匿名函数中(我认为这就是他们所做的)。用我微薄的知识,我唯一能看到的就是它创建了一个分组/容器。

为什么会这样,我应该养成一个习惯吗。我了解下半部分可能是主观的,因此如果太过钝则可以忽略。

(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或立即调用的函数表达式!

09-27 22:06
查看更多