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

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

js面試問題

js面試問題

千萬里不及你 2018-09-10 12:03:11
  var i = 100;    function addI(){        var i = 0;        return function(){             i++;            console.log(i);         }     }     addI()();       // 1     addI()();       // 1     var c = addI();     c();            // 1     c();            // 2今天遇到了這個面試問題,求科普下。為啥addI()()都為1(這點可以理解),而c()()執行i會遞增?
查看完整描述

3 回答

?
qq_藥藥_0

TA貢獻52條經驗 獲得超27個贊

第一個每次都從新var定義了一次,第二個沒有從新定義。

查看完整回答
反對 回復 2018-09-11
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

有點汗顏啊,竟然沒有把握——我的理解:add()()只是單純的執行一次add方法,當給c對象引用add方法時,c對象一直存在(活引用),add方法中的方法形成了一個閉包(此時c對象引用的add方法已經形成了一個閉包)。第一次調用的時候,add方法內的i對象賦值為0,在執行匿名函數是,內部i沒有值,找到外部的i,并++。第二次調用時,add方法再次申明了一個i對象,但是此時的內部匿名函數內i還保留著上一次調用的值。所以直接在上一次調用的結果i++。不知道對不對的

查看完整回答
反對 回復 2018-09-10
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

addI() === addI() //false

每次運行生成的結果函數都不一樣,各自引用各自閉包內的 i 值.
如果同一個函數運行,則會繼續修改這個函數所屬閉包內的 i 值.


查看完整回答
反對 回復 2018-09-10
  • 3 回答
  • 0 關注
  • 990 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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