閉包 是由做用域鏈引發的。閉包
var parent = function(){ var a = 'hello'; return function(){ console.log(a); } } var my = parent(); my();//輸出'hello',由於返回的函數能夠經過做用域鏈訪問a
如上代碼:函數
定義parent函數,返回一個匿名函數,並從全局做用域調用這個返回的匿名函數。spa
由於匿名函數被定義在parent函數內部,所以,它被調用後仍然可以訪問parent函數的做用域。這就是閉包。code
//另外一個例子 var myfunc = function(arg){ return { myMethod:function(){ return arg; } } } var my = myfunc('hello') my.myMethod(); //返回 hello