-2
我正在阅读一些代码,并遇到此问题。为什么变量等于一个返回函数的匿名函数?
var myvar = (function(){
return function() {
// code here
}
})();
我有点困惑,为什么它是这样写的。它似乎被命名,匿名和自我执行。这怎么能写得更干净?
我正在阅读一些代码,并遇到此问题。为什么变量等于一个返回函数的匿名函数?
var myvar = (function(){
return function() {
// code here
}
})();
我有点困惑,为什么它是这样写的。它似乎被命名,匿名和自我执行。这怎么能写得更干净?
在Javascript中,var
是函数作用域或全局作用域。有时你需要块范围。在ES6之前,function(){}()
是模拟块范围的唯一方法。 (ES6介绍let
和const
。)
例如,
var callbacks = [];
for (var i = 0; i < 10; i++) {
var callback = (function() {
var index = i;
return function() {
console.log('i = ' + i);
console.log('index = ' + index);
};
})();
callbacks.push(callback);
}
随着function(){}()
包装,所有的回调有自己index
变量。 i
在包装外部并且被共享。如果我们要调用callbacks[5]()
,它会记录
i = 10
index = 5
的function(){}()
结构有时被称为“立即调用的函数表达式”,或“IIFE”的简称。
变量'myvar'结束为从外部函数返回的那个函数的引用。这是一个常见的成语。外部函数可以声明和初始化返回函数使用的变量。 – Pointy
看看http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – Derek