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

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

JS一道域和i++有關的問題,面試題,求幫忙

JS一道域和i++有關的問題,面試題,求幫忙

undertale 2017-03-16 21:47:36
這道題挺經典的相信很多人都做過了,正確答案是010。我很疑問第二個值為什么是1第一次運行f1輸出0因為i是后加的,第二次運行f1,又重新賦值了var i=0啊,然后i又是后加的,所以應該輸出0啊,為什么是1呢?
查看完整描述

2 回答

?
Caballarii

TA貢獻1123條經驗 獲得超629個贊

f1實際上是Foo里return的那個函數,所以f1()只執行了console.log(i++),由于閉包的存在,兩次f1()操作了同一個i,而f2()操作了另一個i

查看完整回答
1 反對 回復 2017-03-16
  • undertale
    undertale
    不好意思我太菜了,請問f1為啥是Foo的return函數?我以為f1=Foo f1(); 就是把Foo全部執行一遍
  • Franc_Ribery
    Franc_Ribery
    很明顯把Foo()的執行結果賦值給了f1...函數的執行結果就是return的值,如果return沒寫的就是,所以這里f1就是Foo所返回的匿名函數,又因為這是一個閉包,你的閉包被變量f1所引用,所以這個閉包會一直存在直到f1變量被銷毀,所以第二次執行的時候輸出的就是1,因為閉包并沒有被銷毀,所以連同它所關聯的i變量被一起保存了下來。。
  • Franc_Ribery
    Franc_Ribery
    很明顯把Foo()的執行結果賦值給了f1...函數的執行結果就是return的值,如果return沒寫的就是,所以這里f1就是Foo所返回的匿名函數,又因為這是一個閉包,你的閉包被變量f1所引用,所以這個閉包會一直存在直到f1變量被銷毀,所以第二次執行的時候輸出的就是1,因為閉包并沒有被銷毀,所以連同它所關聯的i變量被一起保存了下來。。
?
Franc_Ribery

TA貢獻4條經驗 獲得超0個贊

很明顯把Foo()的執行結果賦值給了f1...函數的執行結果就是return的值,如果return沒寫的就是,所以這里f1就是Foo所返回的匿名函數,又因為這是一個閉包,你的閉包被變量f1所引用,所以這個閉包會一直存在直到f1變量被銷毀,所以第二次執行的時候輸出的就是1,因為閉包并沒有被銷毀,所以連同它所關聯的i變量被一起保存了下來。。

查看完整回答
反對 回復 2017-03-17
  • 2 回答
  • 1 關注
  • 1750 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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