我没有找到要求与此类似的模式的帖子,抱歉,如果我错过了。
无论如何,我在许多jQuery插件或脚本中重复看到这种模式:
(function () {
...........
}());
它的目的是什么?它有名字吗?
谢谢!
答案 0 :(得分:5)
它也被称为立即调用函数表达式
Ben Alman有a good article covering IIFE usage,以及为什么"自动执行匿名功能"不是最好的术语:
立即调用的最有效副作用之一 函数表达式是,因为这个未命名的,或匿名的, 函数表达式立即被调用,而不使用 标识符,可以在不污染当前范围的情况下使用闭包。
[... T]“自我执行”一词有点误导,因为它是 即使函数是,也不是正在执行的函数 被执行。此外,“匿名”是不必要的具体,因为 立即调用函数表达式可以是匿名的,也可以是 命名。至于我更喜欢“被调用”而不是“被执行”,这是一个 简单的头韵问题;我认为“IIFE”看起来和听起来更好 比“IEFE。”
答案 1 :(得分:3)
这是立即调用的函数表达式 它对于创建其内容的范围是有用的。 它与此类似:
function myFunc() {
//code
}
myFunc();
但有2个不同之处:
上面的代码是一个函数声明,与函数表达式不同。上面的'myFunc'被存储为变量,除非你将它用作表达式,如下所示:
foo(function myFunc() {
//code
});
然后它不会被存储为变量。
答案 2 :(得分:3)
这是一个立即调用的函数表达式(Fiddle):
(function () {
alert("pee");
}());
答案 3 :(得分:1)
这是一个立即调用的函数 - 只要你声明它,它就会被唤起。
Javascript中的()
语法意味着“使用(
和)
之间的任何参数调用此函数。由于示例中的括号之间没有任何内容,因此没有参数提供给函数调用;但是如果你需要提供参数,你可以这样做:
(function foo(arg1, arg2) {
alert(arg1 + " " + arg2);
})(3, 5);
会立即致电foo()
并传入3
和5
作为两个参数。