3

请解释以下在 javascript 函数中编写函数的方式:

(function (){
 // some code 
})()

我理解由于大括号“ () ”,该函数将立即执行,但是将函数括在大括号中是什么意思?

4

3 回答 3

4

正如 RobG 指出的那样,这是您原始问题中唯一有效的陈述选择。

(function (){
 // some code 
}())

这在解析后立即执行,并提供了一种将函数内的代码与其余代码分开的方法。这称为闭包(参见MDN 上的闭包),可能有助于解决脚本中的内存泄漏问题。

于 2011-06-14T08:29:50.423 回答
4

你的语法不正确。编辑:固定。

查看您想要调用一次且仅一次的普通函数定义:

function add(x,y) {
   var z = x + y; 
   // do something with z
}

add(2,3);

您可以减少此代码以便立即执行它,无需将其命名为add

(function(x ,y) {
   var z = x + y; 
   // do something with z
})(2,3)

请注意我们如何用一组括号将函数括起来以使其成为可调用的表达式。此模式通常用于创建某些变量的闭包(捕获状态),例如:

jQuery.noConflict(); //Disables the use of $ in the global scope
(function($) {

   //Safely use $ inside this function
   $('.link').click(function(e) {
      //etc
   });

})(jQuery);
于 2011-06-14T09:04:17.893 回答
1

将代码包含在分组运算符中会将其从函数声明更改为函数表达式(其中名称是可选的,通常省略)。该模式通常被称为“立即调用的函数表达式”(iife)或“立即执行的函数表达式”(iefe)。

它用于替换只调用一次的函数声明。它也是模块模式的基础。

于 2011-06-14T08:32:06.863 回答