插入script标签,然后立即移出,为什么里面的代码一定会执行完毕了呢?

下面这段代码插入了一段script代码,然后立即将其移出,那是什么机制保证了移出节点(removeChild函数)前,里面的代码已经执行完毕了呢?


var a = 1,

    code = 'a = 2;',

    doc = document,

    body = doc.body,

    script = doc.createElement('script');

script.innerHTML = code;

body.appendChild(script).parentNode.removeChild(script);

console.log(a);


杨魅力
浏览 1124回答 4
4回答

阿波罗的战车

并不是你想的那样立即执行的,这种链式调用是前一个执行完毕,再执行后面的内容比如var obj={    a:0,    parentNode:function(){    console.log(this.a);    return this;    },    appendChild:function(){    console.log(this.a);    return this;    },    removeChild:function(){    console.log(this.a);    return this;    }}obj.appendChild().parentNode().removeChild();运行时都是等待上一部执行完成,再进入下一步

慕桂英3389331

javascript是一种弱语言 他没有那么严格 所以他的代码是从上往下读 按逻辑顺序 他是你上一段处理的代码执行完毕 在remove那个操作 但是已经被执行了

慕盖茨4494581

运行下代码,就知道是什么样的了var a = 1,    code = 'a = 2;var d=100;while(d!=0) { d--;console.log("executing script");console.log(document.getElementById("myScript"));}; console.log("script done");',    doc = document,    body = doc.body,    script = doc.createElement('script');    script.setAttribute("id","myScript");script.innerHTML = code;script=body.appendChild(script);console.log("append script");console.log(document.getElementById("myScript"));script.parentNode.removeChild(script);console.log("remove script");console.log(document.getElementById("myScript"));console.log(a);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript