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

寻求匿名函数JavaScript逻辑的澄清,javascript,anonymous-function,Javascript,Anonymous Function,我有点困惑于我一直看到的一种常见模式。通常是这样的 (function( w ){ w.functionName = function(){ // Function stuff, blah blah blah }; }( this )); 我看到的另一个常见问题是: (function( $ ){ $.fn.functionName = function(){ // Function stuff, blah blah blah }

我有点困惑于我一直看到的一种常见模式。通常是这样的

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

      // Function stuff, blah blah blah

    };
  }( this ));
我看到的另一个常见问题是:

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

    // Function stuff, blah blah blah

    };
}( jQuery ));
我对匿名函数有些熟悉,尽管我很好奇,w是什么,它的用途是什么

在匿名函数末尾使用/jquery的原因是什么

谢谢你的反馈!我很感激所有的回答。

w只是functionnormal事物的参数的正式名称,在这个例子中,实际参数是this或jQuery。我不知道为什么这个示例中的jQuery会这样做,可能它被认为是一种很好的初始化

例如:

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

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

console.log(obj.x);//5
w只是functionnormal对象的参数的正式名称,在本例中,实际参数是this或jQuery。我不知道为什么这个示例中的jQuery会这样做,可能它被认为是一种很好的初始化

例如:

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

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

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

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

使用此模式的另一种常见方式是使用未定义的参数

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

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

使用此模式的另一种常见方式是使用未定义的参数

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

在jQuery插件中看到这一点的主要原因之一是将$与其他使用它的库(如Mootools或prototype)隔离开来

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

然后,当您在函数中使用$时,它已经被定义为jQuery对象,允许您写入$.doStuff


使用此隔离的$实例不是jQuery在加载时创建的全局$,因此,如果另一个使用$alias的库已就位,则自执行函数中的$将与全局$隔离,以避免冲突。如果您在代码中的其他地方使用jQuery.noConflict,情况也是一样的

您在jQuery插件中看到这一点的主要原因之一是将$与使用它的其他库(如Mootools或prototype)隔离开来

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

然后,当您在函数中使用$时,它已经被定义为jQuery对象,允许您写入$.doStuff


使用此隔离的$实例不是jQuery在加载时创建的全局$,因此,如果另一个使用$alias的库已就位,则自执行函数中的$将与全局$隔离,以避免冲突。如果在代码中的其他地方使用jQuery.noConflict,情况也是如此

这是立即调用函数表达式IIFE的一个示例

在Addy Osmani的在线书中,这一部分涵盖了生活

为了回答这个常见模式的用途,我在书中引用了几句话:

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

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

IIFEs是将应用程序逻辑封装到 保护它不受全局命名空间的影响,但在 名称空间的世界


我建议您看看这本书——它还介绍了其他有用的模式,如模块模式。

这是一个立即调用函数表达式IIFE的示例

在Addy Osmani的在线书中,这一部分涵盖了生活

为了回答这个常见模式的用途,我在书中引用了几句话:

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

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

IIFEs是将应用程序逻辑封装到 保护它不受全局命名空间的影响,但在 名称空间的世界

我建议你看看这本书——它涵盖了其他有用的模式,比如
与模块模式一样。

w很可能是窗口。这在全局范围内是一个窗口。您看到的是IIFEs立即调用的函数表达式。该模式称为立即函数。函数是在javascript中创建作用域的唯一方法,这就是为什么立即函数很有用。也可以阅读currying的可能重复:很可能是窗口。这在全局范围内是一个窗口。您看到的是IIFEs立即调用的函数表达式。该模式称为立即函数。函数是在javascript中创建作用域的唯一方法,这就是为什么立即函数很有用。也可以阅读有关currying的可能重复:首先定义任意函数。让我们把它看作函数A…{…}。a有一个参数:w。所以这个函数实际上看起来像:函数aw{…}。然后,你像athis一样调用它,如果this=window,那么w=window。顺便说一句,需要调用任意函数来代替它的定义,因为以后你不能引用它;与window.functionName=function{//function stuff,诸如此类}相同;因为这是作为paraemter传递的,并且在全局范围中是窗口。在第二个例子中,$.fn.functionName=function{//function stuff,诸如此类;与jquery.fn.functionName=function{//function stuff,诸如此类;有趣的是,首先定义任意函数。让我们把它看作函数A…{…}。a有一个参数:w。所以这个函数实际上看起来像:函数aw{…}。然后,你像athis一样调用它,如果this=window,那么w=window。顺便说一句,需要调用任意函数来代替它的定义,因为以后你不能引用它;与window.functionName=function{//function stuff,诸如此类}相同;因为这是作为paraemter传递的,并且在全局范围中是窗口。在第二个例子中,$.fn.functionName=function{//function stuff,诸如此类;与jquery.fn.functionName=function{//function stuff,诸如此类;感兴趣谢谢你的推荐,我得去看看!谢谢你的推荐,我得去看看!这是出于同样的原因。从技术上讲,您可以在全局命名空间上重新定义未定义的值。在我上面的例子中,你是在防范这种情况。有点疯狂,但如果你在写其他人可能会用到的代码,仍然需要考虑。从技术上讲,您可以在全局命名空间上重新定义未定义的值。在我上面的例子中,你是在防范这种情况。有点疯狂,但如果你正在编写其他人可能使用的代码,那就要考虑一下。