鍍金池/ 問答/HTML/ 插入script標(biāo)簽,然后立即移出,為什么里面的代碼一定會(huì)執(zhí)行完畢了呢?

插入script標(biāo)簽,然后立即移出,為什么里面的代碼一定會(huì)執(zhí)行完畢了呢?

下面這段代碼插入了一段script代碼,然后立即將其移出,那是什么機(jī)制保證了移出節(jié)點(diǎn)(removeChild函數(shù))前,里面的代碼已經(jīng)執(zhí)行完畢了呢?

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);
回答
編輯回答
爛人

javascript是一種弱語言 他沒有那么嚴(yán)格 所以他的代碼是從上往下讀 按邏輯順序 他是你上一段處理的代碼執(zhí)行完畢 在remove那個(gè)操作 但是已經(jīng)被執(zhí)行了

2018年4月14日 08:03
編輯回答
舊言

并不是你想的那樣立即執(zhí)行的,這種鏈?zhǔn)秸{(diào)用是前一個(gè)執(zhí)行完畢,再執(zhí)行后面的內(nèi)容比如

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

運(yùn)行時(shí)都是等待上一部執(zhí)行完成,再進(jìn)入下一步

2018年4月4日 07:34
編輯回答
薔薇花

運(yùn)行下代碼,就知道是什么樣的了

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);
2018年7月20日 02:51
編輯回答
尐潴豬

首先,沒有遇見過這種插入之后馬上刪除的情況,所以我大概說一下我的看法,需要對(duì)你有所幫助:
1、這個(gè)script是瀏覽器異步加載的,一般情況下不知道何時(shí)加載完,像這種里面就一個(gè)a=2;,它的執(zhí)行力是很快的,解析非??臁2恢闶欠裨囘^放成百上千條代碼進(jìn)去,還能把所有代碼執(zhí)行完成的情況?

2、從另一個(gè)角度來想,我項(xiàng)目有個(gè)需求就是要?jiǎng)討B(tài)創(chuàng)建script標(biāo)簽插入到body中去,如果插入了里面代碼不先立即執(zhí)行一遍,那么不就和沒有使用動(dòng)態(tài)插入是一樣的。

綜上所述,雖然插入之后馬上又刪除了,且代碼是一步執(zhí)行的,但是這個(gè)例子里面代碼就一句,而且畢竟appendChild的執(zhí)行在removeChild的前面,肯定會(huì)先開始執(zhí)行。可以嘗試外鏈一個(gè)代碼多的js文件或者多添加代碼再做嘗試,看是否也是全部執(zhí)行完

關(guān)于動(dòng)態(tài)插入script文件的的一些方法鏈接(來自網(wǎng)絡(luò)):http://www.cnblogs.com/skykan...

2018年1月28日 06:47