你如何在JavaScript中解释这个结构?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)
(function() 
 {
     //codehere
 }
)();

这种语法有什么特别之处?什么()(); 意味着?

提问于
用户回答回答于

这是一个匿名函数被调用。

其目的是创建一个新的作用域,局部变量不会流出。例如:

var test = 1;
(function() {
  var test = 2;
})();
test == 1 // true

关于这个语法的一个重要注意事项是,如果你还没有,你应该养成用分号终止语句的习惯。这是因为当您调用Javascript时,Javascript允许在函数名称和括号之间进行换行。

下面的代码片段会导致错误:

var aVariable = 1
var myVariable = aVariable

(function() {/*...*/})()

这是它实际上在做什么:

var aVariable = 1;
var myVariable = aVariable(function() {/*...*/})
myVariable();

创建新块范围的另一种方法是使用以下语法:

new function() {/*...*/}

不同之处在于前一种技术不会影响关键字“this”指向的位置,而第二种技术则不会。

Javascript 1.8也有一个let语句来完成同样的事情,但不用说,大多数浏览器都不支持它。

用户回答回答于

创建一个匿名函数,closure和all,final()指示它自己执行。

它基本上与以下相同:

function name (){...}
name();

所以基本上这个代码没有什么特别之处,它只是一个创建方法并调用它的“快捷方式”,而不必命名它。

这也意味着函数是一次性的,或者是一个对象的内部函数,并且在需要闭包的特征时最为有用。

扫码关注云+社区