自执行函数 jquery 与 JavaScript 的区别
self executing function jquery vs javascript difference
两者有什么区别 -
第一:-
(function () {
var Book = 'hello';
}());
第二:-
(function () {
var Book = 'hello';
})();
第一个和第二个是相似的一些工作方式..
第三:-
(function ($) {
var Book = 'hello';
})(jQuery);
我需要使用什么模式以及在我的编码中的位置..我在阅读与 backboneJS 相关的文章时看到的第三种模块模式。
我从第三个"带有参数"jQuery"的自执行函数"中理解的......
任何人都可以给我一些关于立即调用的函数表达式 (IIFE) 的想法。
谢谢!!
在所有情况下,您都在执行匿名功能。我认为 1 与 2 相同。在第三种情况下,您将jQuery作为参数传递。当您想要将 jQuery 封装在函数范围内时,会执行此操作。
例如,在你的应用程序中,jQuery var可以是jQuery。但是在您的匿名函数中,您可能希望将其用作 $。
(function ($) {
//Here jQuery is $
var Book = $(document.body).text();
})(jQuery);
//Out of your function, you user jQuery as jQuery (in this example)
var Book = jQuery(document.body).text();
称为闭包,以避免与其他库(例如使用$
的库mootools
)发生冲突。通过这种方式,您可以确保在该函数中使用$
,并将jQuery
作为参数传递。
(function ($) {
$(function () { // Here in this block you can use '$' in place of jQuery
.......
});
})(jQuery); //<----passing jquery to avoid any conflict with other libraries.
立即调用的函数表达式 (IIFE) 是 JavaScript 的核心功能之一。它的主要目的是不要用一次性函数和变量使命名空间混乱。
如果仅使用变量或函数一次,则无需使其可用于其余代码(例如,因此您可以进行私有访问)。对于函数,您可以让它们匿名,如下所示:
(function(){
console.log("Hello symfony world!");
}());
请通过此链接查看
此外,这是一个不到 7 分钟的有用解释性视频
正如其他答案所指出的,它们都是自执行匿名函数或即时匿名函数。
第三个示例用于为函数外部的变量创建别名。这是防止名称冲突和创建代码的好方法,可以在其中轻松更改函数中使用的模块。它本质上是一种依赖注入形式。
(function (doc, win, $, myModule) {
// Code
}(document, window, jQuery, window.MYAPP.myModule));
doc
、win
、$
和myModule
是注入变量。使用这种模式,更改任何注入的组件都很简单。喜欢这个
(function (doc, win, $, myModule) {
// Code
}(document, window, jQuery, window.MYAPP.myModule2)); //Use myModule2 instead myModule
就像其他答案所说的那样,在第三个函数中,您将JQuery
传递给函数。
我想花点时间解释一下为什么前两者是相同的。
创建函数时,该函数的名称实际上是一个函数指针。例如,在 function foo(){}
中,foo
是指向您刚刚创建的函数的指针(它解释了这样的事情)。您可以通过在函数名称末尾添加括号来取消引用该指针(从而执行函数):foo()
。
因此,如果我们再次查看该代码,在第一项中,首先创建函数:
function () {
var Book = 'hello';
}
然后你取消引用它,有效地执行函数:()
在第二个示例中,您将整个函数创建括在括号中:
(function () {
var Book = 'hello';
})
这可确保在下一个命令之前执行创建操作,即再次取消引用函数:()
。在这种情况下,括号并不是真正必要的,因为无论如何都会在执行函数之前创建函数。
所有三个示例都是立即调用的函数表达式 (IIFE)。
唯一的区别是,在第三个示例中,jQuery
作为变量传入,允许您使用其美元命名约定在 IIFE 内使用它。
(function ($) {
var Book = 'hello';
$('#bookelement').html(Book);
})(jQuery);
这些都是自执行函数。现在也称为立即调用的函数表达式 (IIFE)。
前两个完全相同,语法略有不同,第三个是将parameter
作为jQuery对象传递。
事实上,这三个都是自执行函数,ti 实际上取决于你需要做什么。
两者之间的唯一区别是 3 之间。 1 和 2 是相同的。
与 3 的区别在于,您将对 jquery 的引用作为参数传递。现在这个烦恼函数中的所有函数都可以访问 jque
所有这些都是自调用函数的示例。
这将使您清楚地看到:-
var my_func = function(){
var internal_var = "Hello";
return internal_var;
};
var my_func2 = function(name){
var internal_var = "Hello";
return internal_var;
};
var long_var_name = "I can be some object or number or object or array";
var result1 = (my_func());
var result2 = (my_func)();
var result3 = (my_func2)(long_var_name);
console.log(result1, result2, result3);
使用此示例,您可以将其与第一、第二和第三方法进行比较。
- JavaScript中的函数和对象之间没有区别吗?
- javascript函数的:和=之间的区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- Math.min()和Math.max()之间有什么区别?在Javascript中
- 使用Rhino和ASE执行Javascript的区别
- Javascript 类型未定义和 void 之间的区别
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 布局引擎和javascript引擎之间的区别
- 以下两者在javascript中有什么区别
- type=text/javascript和language=javascript之间的区别
- JavaScript中let和var之间的区别
- JavaScript 中的符号传播右移和零填充右移之间的区别
- 在Javascript语法中:和::和:::有什么区别
- JavaScript承诺的定义以及与事件的区别
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- 在javascript中,在变量名之前使用var有什么区别/优势吗
- javascript getTime()和Java getTime(()之间的区别
- JavaScript:Date 的 toString() 和 toLocaleString() 方法之间的区别
- onChange 和 onSubmit 之间的 JavaScript 区别
- 函数和新函数之间的JavaScript区别