我在很多脚本中都看到了这种模式
(function(){})();
它是什么以及为什么要使用它?
答案 0 :(得分:4)
它用于强制创建局部范围,避免使用声明来规范当前(通常是全局)范围。
如果你想避免使用匿名函数,可以像这样重写:
var scope = function() { /*...*/ };
scope();
但匿名函数语法的优点是父函数或全局范围甚至不会被函数名称所污染。
(function() { /*...*/ })();
这也是在javascript中实现信息隐藏的好方法,因为此范围内的声明(函数和变量)将不会从外部可见。但他们仍然可以看到彼此,并且作为javascript实现闭包函数,在这样的作用域内声明的函数将可以访问同一作用域中的其他声明。
答案 1 :(得分:1)
这是定义一个没有名字的函数,并立即调用它。因为Javascript函数充当闭包 - 持久范围 - 这是创建一组互连对象或函数的有用方法。
答案 2 :(得分:1)
匿名函数是定义的函数(或子例程),可能被调用,而不受标识符的约束。
答案 3 :(得分:1)
这是创建闭包的基本语法。更典型的是,它包含一些代码:
(function(){
//Your Code Here
})();
这相当于
var some_function = function() {
//Your Code Here
};
some_function();
这样做的最大原因是清洁;在任何函数之外声明的任何变量都是全局的;但是,在此函数内部声明的变量包含在此函数内部,不会影响函数外部的任何代码或与之交互。将任何类型的可重用插件包装在闭包中是一种很好的做法。
答案 4 :(得分:1)
它立即执行匿名功能。 它基本上与:
相同var test = function(){};
test();
但不要求使用其他变量。 你需要将它包装在附加的括号中以获得函数作为表达式的结果 - 否则它被理解为函数声明,并且你不能执行声明。
它主要用于范围保护 - 因为JS具有功能范围,在这个函数中定义为var x;
的每个变量都将保存在它的函数局部范围内。
所有这些只是意味着'立即执行此函数内的所有内容而不会污染全局范围'。
它也常用于众所周知的模式,例如模块模式和显示模块模式。有关详细信息,请参阅http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth。
答案 5 :(得分:0)
它被称为立即函数或匿名闭包,是 the module pattern 的基础。
它用于为代码创建私有本地范围。