亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一段關于閉包問題的代碼,求大神解釋?

一段關于閉包問題的代碼,求大神解釋?

一顆獼猴桃 2016-06-26 16:33:04
function?f1(){     var?n=999;     nAdd=function(){n+=1}     function?f2(){       alert(n);     }     return?f2;   }   var?result=f1();   result();?//?999   nAdd();   result();?//?1000不是很懂這段代碼為什么第一次result的時候結果是999,這段代碼不是按順序執行的么?還是說nAdd()必須調用才能使用,不然直接跳過直接運行alert?nAd沒有var ,所以是全局變量,所以需要調用?var?name?=?"The?Window";   var?object?=?{     name?:?"My?Object",     getNameFunc?:?function(){       return?function(){         return?this.name;       };     }   };   alert(object.getNameFunc()());這個程序的結果是"The?Window";不是很明白為什么?var?name?=?"The?Window";   var?object?=?{     name?:?"My?Object",     getNameFunc?:?function(){       var?that?=?this;       return?function(){         return?that.name;       };     }   };   alert(object.getNameFunc()());這個程序的結果是"My?Object",上面的都是我在網上看見的,是一段關于閉包的文章,網址如下http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
查看完整描述

1 回答

?
Walk_

TA貢獻48條經驗 獲得超30個贊

問題一:

通常函數必須調用才能使用,除非是立即執行函數。不帶var 定義的是全局

問題二:

嵌套函數指向依然是global,嚴格模式下是:?undefined.

問題三:

為了解決上面的問題,我們先將this捕獲在一個變量中,這里是that變量,來解決這個問題。

查看完整回答
反對 回復 2016-06-26
  • 1 回答
  • 0 關注
  • 1161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號