我想了解这个javascript函数模式

I want to know about this javascript function pattern

本文关键字:javascript 函数 模式 了解      更新时间:2023-09-26

可能重复:
这是什么";(function(){})”,括号内的函数,在javascript中是什么意思
javascript匿名函数

(函数())()

这在许多js库中使用,如jquery、YUi

这被称为模块模式。这个想法是有一个封装的模块,它不能与您或其他人创建的任何其他模块冲突。您可以在该模块中创建公共和私有方法。参见:Js Pattern

我不确定(function())()是什么意思,但我会假设你指的是(function() { … })()。大致相同于:

f = function() { … }; // Define a function.
f();                  // Call it.

唯一的区别是它这样做不需要变量。

它是一个匿名的自执行函数。它是匿名的,因为它没有命名,并且是自执行的,所以它可以运行(没有其他方法可以运行未命名的函数)。

封闭一个谨慎的代码模块特别有用,因为它可以充当一个闭包,防止变量泄漏到全局命名空间中。

您立即调用一个带有特定参数的匿名函数。

一个例子:

(function(name){   alert(name); })('peter') This alerts "peter".

在jQuery的情况下,您可以将jQuery作为参数传递,并在函数中使用$。因此,您仍然可以在noConflict模式下使用jQuery,但可以使用方便的$:

jQuery.noConflict() (function($){   var obj = $('<div/>', { id: 'someId' }); })(jQuery)

它只需立即执行括号中的代码(第一个块返回一个函数,第二对parens执行它)。

以这两个片段为例:

function foo() {
    print 'foo';
}
(function() {
    print 'foo';
})();

第一个函数在调用foo()之前不会执行任何操作;而第二个将立即打印"foo"。