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

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

關于《javascript語言精粹》中P38閉包:改變Body顏色的例子沒有在瀏覽器生效

關于《javascript語言精粹》中P38閉包:改變Body顏色的例子沒有在瀏覽器生效

萬千封印 2018-08-30 14:13:34
var fade = function(node) {    var level = 1;    var step = function () {        var hex = level.toString(16);         node.style.backgroundColor = '#FFF' + hex + hex;        if (level < 15) {             level += 1;             setTimeout(step, 100);         }     }     setTimeout(step, 100); }; fade(document.body);1、 怎么理解 內部函數擁有比它的外部函數更長的生命周期 這句話2、 在這個函數中的兩次setTimeout();第一次的setTimeout是用來持續執行的。那么第二次的setTimeouts僅僅只是為了在0.1秒后調用step的嗎?難道不可以直接調用step()嘛?3、 為什么瀏覽器中Body顏色沒有變換?我試著換了別的元素,把bacgroundColor換成bacgroundcolor,或者用jquery,發現都不想。但是console.log()還是能打印出顏色變化的。這是為森馬?
查看完整描述

1 回答

?
犯罪嫌疑人X

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

內部函數比外部函數生命周期長是不是說的是內部函數式聲明式函數并且外部能夠調用或延遲調用的情況?

function outer(){    // ...
    function inner(){
    }    // ...
    return {
        inner : inner
    }
}

上面這種情況,在outer函數生命周期內(函數體部分)inner函數都是可以訪問的,并且outer函數的調用者還能調用inner函數,而這時outer函數的生命周期已經結束了。

function outer(){    // ...
    function inner(){
    }    // ...
    setTimeout(inner,1000);
}

上面這種情況類似你例子中說的,setTimeout是個異步函數,到setTimeout的時候不會等待inner的執行outer的生命周期就已經結束了,而1s后inner函數還可以執行。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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