2017-04-14 105 views
-2

我正在阅读一些代码,并遇到此问题。为什么变量等于一个返回函数的匿名函数?

var myvar = (function(){ 
    return function() { 
    // code here 
    } 
})(); 

我有点困惑,为什么它是这样写的。它似乎被命名,匿名和自我执行。这怎么能写得更干净?

+0

变量'myvar'结束为从外部函数返回的那个函数的引用。这是一个常见的成语。外部函数可以声明和初始化返回函数使用的变量。 – Pointy

+0

看看http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – Derek

回答

1

在Javascript中,var是函数作用域或全局作用域。有时你需要块范围。在ES6之前,function(){}()是模拟块范围的唯一方法。 (ES6介绍letconst。)

例如,

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”的简称。

相关问题