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

為了賬號安全,請及時綁定郵箱和手機立即綁定

有人能幫我嗎

http://img1.sycdn.imooc.com//5567be5b0001e11c07390397.jpg

請問 當 var func=outer(); 時func變量 的值為30嗎。

感覺func()是再一次調用outer()函數的感覺,那 localVal變量就重新初始化了呀,怎么就與左邊的不同?

正在回答

4 回答

func不是數字,注意func是一個函數對象,調用之后才返回了30的結果。

0 回復 有任何疑惑可以回復我~

outer函數的返回值為 一個函數,所以func等于一個函數!

0 回復 有任何疑惑可以回復我~

右邊 這個函數 從下 往上看

var?func?=?outer();

這里 func 復制為 函數 outer的執行結果,那在往上看,函數 outer 執行后的 結果是什么呢

function?outer(){
????var?localVal?=?30;
????return?function(){
???????return?localVal;
????}
}

一個函數的的結果 如果沒有返回值的話 默認是 'undefined',如果有返回值的話 就是返回 return 后面語句的執行結果。所以outer() 應該返回以下結果

function(){
????return?localVal;
}

可以通過命令行工具 來驗證 輸入 func 返回的就是這個了

然后我們看到 返回的結果是一個匿名函數(沒有名字的函數)。好了 這個函數運行后返回的是 localVal 這個值??梢岳斫鉃?是從他的'父函數'那里得到的。那么為什么可以獲得 '父函數'里的變量呢,這就牽扯到閉包了,閉包這個課程里說的有,可以再仔細看看或者查閱一下資料

1 回復 有任何疑惑可以回復我~
#1

搖擺企鵝

打錯字了 func 賦值為 打成復制為了 ····
2015-05-29 回復 有任何疑惑可以回復我~

右邊:

????func=function(){

????????return localVal;

}

這是一種常見的閉包寫法

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

有人能幫我嗎

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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