这个未知的 JavaScript 语法是什么?

问题描述 投票:0回答:5

这是 jQuery 代码吗

(function(jQuery){
})(jQuery);

相当于

$(document).ready(function () {
});

如果是,两者有什么区别?如果没有,第一个做什么?

javascript jquery anonymous-function iife
5个回答
5
投票

它们并不等同。

您的第一个示例是立即调用函数表达式 (IIFE)。 它围绕本地定义的变量创建一个闭包。

您的第二个示例指定了当 DOM 完全加载时执行的函数。它用于确保 DOM 中的所有元素节点在执行所附代码之前都可用。 这也是一个关闭。

两个示例都使用匿名函数。

值得指出的是,使用两个示例都是很好的做法,如下所示:

(function($){ // locally-scoped, DOM-is-NOT-Ready-code here. $(function () { // your locally-scoped, DOM-is-ready-code here. }); }(jQuery)); // note that I've moved the invocation into the parens // that contain the function. This makes JSLint happy!
    

3
投票
绝对不是,第一个是自执行匿名函数,第二个是

ready

处理程序。

(function(jQuery){ //jQuery in this scope is referencing whatever is passed-in })(jQuery);

因此,函数内部的

jQuery

 不一定与函数外部的 
jQuery
 相同。但您通常不希望将全局变量名称与本地变量名称混合匹配。

举这个例子:

(function(obj) { alert(obj); })('Hello');

这定义了一个函数,然后

立即调用它,传入“Hello”


3
投票
$(document).ready(function () { });

等价于:

$(function() { });

第一个片段是立即调用的匿名函数,它创建一个本地范围:

(function() { var x = 2; })(); alert(x); // undefined
    

2
投票
不。第一个并没有真正做太多事情。只需将内部的任何变量与周围的范围分开,并在内部创建一个本地

jQuery

 变量即可。

第二个传递一个函数,该函数在 DOM 准备好之后运行(换句话说,在

<body> 加载之后)。

常见的等价物:

$(document).ready(function () { });

是:

$(function () { });

它做同样的事情。

同时:

(function(jQuery){ })(jQuery);

通常写为:

(function($){ })(jQuery);

使得
$
变量不再是全局变量。如果全局

$

 变量已在使用中,则很有用。

一点也不。第一个是闭包 - 您创建然后立即调用的函数。但是,通常您会像这样将两者结合起来:

1
投票
(function($) { // use the $ variable $(document).ready(function(){ // ... }); })(jQuery);

通过创建闭包,您可以在本地将该代码块的“jQuery”重命名为“$”。使用闭包语法的原因是,即使 $ 变量可能没有在全局范围内定义为 jQuery 对象,也可以使用它(即某些 JavaScript 框架(如原型)使用 $ 作为变量)。

每当您编写 jQuery 插件时,您都应该将所有 jQuery 代码包含在这种闭包中,这样它就不会干扰任何其他 JavaScript 框架。如果您不编写插件并且不使用任何其他 JavaScript 框架,您可能不必费心将代码包含在闭包中。

© www.soinside.com 2019 - 2024. All rights reserved.