我是javascript的新手,我读到了模块模式以提供某种命名空间并拥有私有和公共成员,例如:
var module = (function() {
var s = "Hello, i'm private and in closure!";
return {
myString : s,
myFunc: function() { alert(s); }
};
})();
Run Code Online (Sandbox Code Playgroud)
我确实看到了它的好处,因为它为您提供了面向对象编程的一些优点.但是我已经看到很多没有分配给变量的IIFE的例子.与你调用的普通函数相比,这(就我所见)没有任何优势:
(function() {
var s = "Hello I'm private!";
$('#myButton').on('click', function() {
alert(s);
});
})();
Run Code Online (Sandbox Code Playgroud)
function Initialize() {
var s = "Hello I'm private!";
$('#myButton').on('click', function() {
alert(s);
});
}
Initialize();
Run Code Online (Sandbox Code Playgroud)
它们都有私有变量,可以避免创建全局变量,并且它们都可以在不向变量返回任何值的情况下执行.虽然第二个让你可以选择一个好名字,而不是一个没有名字的潜在大型IIFE,让读者知道发生了什么.我到处看到的答案是"避免命名空间污染"但两种方法都是这样做的,第一种方法有点难以理解?
简而言之:
使用IIFE比我缺少的正常功能有什么好处?我为什么要用它们?
Moh*_*man 14
有时您需要同时定义和调用函数,并且只需要一次,因此在这种情况下,匿名函数可以帮助您.在这种情况下,给函数命名然后调用它们就是多余的.
有时你想namespace为你的变量创建一个.所以anonymous功能也可以帮助你.例如
(function($) {
$.fn.pluginName = function(opt) {
// implementation goes here...
}
}(jQuery));
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,您可以安全地在代码中$用作jQuery同义词.
如果您使用如下所示的名称定义函数,那么它将创建具有您定义的函数名称的全局变量.
function myFunction() {
// function code goes here.
}
myFunction();
Run Code Online (Sandbox Code Playgroud)
但是如果你定义它没有名称,那么它将不会创建任何全局变量,并且您的全局命名空间不会被污染.
(function myFunction() {
// function code goes here.
}());
Run Code Online (Sandbox Code Playgroud)
只有当您需要从代码中的不同位置调用时,带名称的函数才有用.
| 归档时间: |
|
| 查看次数: |
6405 次 |
| 最近记录: |