猿问

关于《javascript语言精粹》中P38闭包:改变Body颜色的例子没有在浏览器生效

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()还是能打印出颜色变化的。这是为森马?


万千封印
浏览 493回答 1
1回答

犯罪嫌疑人X

内部函数比外部函数生命周期长是不是说的是内部函数式声明式函数并且外部能够调用或延迟调用的情况?function&nbsp;outer(){&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;inner(){ &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inner&nbsp;:&nbsp;inner &nbsp;&nbsp;&nbsp;&nbsp;} }上面这种情况,在outer函数生命周期内(函数体部分)inner函数都是可以访问的,并且outer函数的调用者还能调用inner函数,而这时outer函数的生命周期已经结束了。function&nbsp;outer(){&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;inner(){ &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;setTimeout(inner,1000); }上面这种情况类似你例子中说的,setTimeout是个异步函数,到setTimeout的时候不会等待inner的执行outer的生命周期就已经结束了,而1s后inner函数还可以执行。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答