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

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

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

杨魅力 2019-03-07 18:15:58
下面这段代码插入了一段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);
查看完整描述

4 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

并不是你想的那样立即执行的,这种链式调用是前一个执行完毕,再执行后面的内容比如


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();

运行时都是等待上一部执行完成,再进入下一步


查看完整回答
反对 回复 2019-03-16
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-03-16
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

运行下代码,就知道是什么样的了


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);


查看完整回答
反对 回复 2019-03-16
  • 4 回答
  • 0 关注
  • 1123 浏览
慕课专栏
更多

添加回答

举报

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