寻求匿名函数JavaScript逻辑的澄清

时间:2013-01-05 23:33:13

标签: javascript anonymous-function

我对我一直看到的常见模式所做的事情感到有些困惑。它通常看起来像这样。

(function( w ){
    w.functionName = function(){

      // Function stuff, blah blah blah

    };
  }( this ));

我看到的另一个常见的是:

(function( $ ){
    $.fn.functionName = function(){

    // Function stuff, blah blah blah

    };
}( jQuery ));

我熟悉匿名功能,虽然我很好奇,w是什么,它用于什么?

这个/ jquery在匿名函数结束时的原因是什么。

感谢您对此的所有反馈!我很感激所有的回复。

4 个答案:

答案 0 :(得分:1)

w只是函数参数的正式名称(正常情况下,本例中,实际参数为thisjQuery)。我不知道为什么在这个给定的例子中jQuery正在做的事情,可能它被认为是一种很好的初始化。

示例:

var obj={'x':1};
console.log(obj.x);//1

(function(p){
    p.x=5;
})(obj);

console.log(obj.x);//5

答案 1 :(得分:1)

此模式用于在JavaScript中创建范围。它被称为立即调用函数表达式(IIFE)。传递参数以保证它们具有正确的值,以防以后重新定义全局引用。

此模式的另一种常见方式是使用undefined参数。

(function ($, undefined) {
   // ...
})(jQuery);

答案 2 :(得分:1)

使用jQuery插件看到这一点的一个主要原因是将$与其他使用它的库隔离开来,例如Mootools或原型

在jQuery案例中..有一个名为$的参数,(jQuery)将jQuery对象传递给自执行函数。

然后当你在函数中使用$时,它已被定义为jQuery对象,允许你编写$.doStuff()

使用此$的绝缘实例不是jQuery在加载时创建的全局$,因此如果使用了另一个使用$别名的库,则$内自执行功能与全局$避免冲突。如果您在代码中的其他地方使用jQuery.noConflict()

,情况也是如此

答案 3 :(得分:1)

这是“立即调用函数表达式”(IIFE)的一个例子。

在Addy Osmani的在线图书Learning JavaScript Design Patterns中,Namespacing Patterns部分涵盖了IIFE。

为了回答这种常见模式的用法,我在书中加入了几个引用:

  

在本书的前面,我们简要介绍了IIFE的概念   (立即调用的函数表达式)实际上是一个   未命名的函数,在定义后立即调用。

     

在JavaScript中,因为显式定义了变量和函数   在这样的上下文中,只能在其内部访问,功能   调用提供了一种实现隐私的简便方法。

     

IIFE是一种将应用程序逻辑封装的流行方法   保护它免受全局命名空间的影响,但也可以使用它   命名空间世界。

我建议你看看这本书 - 它还涵盖了其他有用的模式,例如模块模式。