【问题标题】:A Javascript function一个Javascript函数
【发布时间】:2011-09-14 12:21:05
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript iife


【解决方案1】:

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

查看一个你想调用一次且只调用一次的普通函数定义:

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

add(2,3);

您可以减少这段代码,以便立即执行它,无需命名它添加

(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);

【讨论】:

  • 由于这个特殊原因,这种自调用匿名模式一直出现,因此我将其包括在内。没有 jQuery -1 :)
【解决方案2】:

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

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

这是在解析后立即执行的,并提供了一种将函数内的代码与其余代码分开的方法。这称为闭包(请参阅Closures on MDN),可以在您的脚本中使用help with memory leaks

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 2013-03-04
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多