我对我一直看到的常见模式所做的事情感到有些困惑。它通常看起来像这样。
(function( w ){
w.functionName = function(){
// Function stuff, blah blah blah
};
}( this ));
我看到的另一个常见的是:
(function( $ ){
$.fn.functionName = function(){
// Function stuff, blah blah blah
};
}( jQuery ));
我熟悉匿名功能,虽然我很好奇,w是什么,它用于什么?
这个/ jquery在匿名函数结束时的原因是什么。
感谢您对此的所有反馈!我很感激所有的回复。
答案 0 :(得分:1)
w
只是函数参数的正式名称(正常情况下,本例中,实际参数为this
或jQuery
)。我不知道为什么在这个给定的例子中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是一种将应用程序逻辑封装的流行方法 保护它免受全局命名空间的影响,但也可以使用它 命名空间世界。
我建议你看看这本书 - 它还涵盖了其他有用的模式,例如模块模式。