为了账号安全,请及时绑定邮箱和手机立即绑定

关于《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 关注
  • 492 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信