鍍金池/ 問答/HTML/ 動態(tài)創(chuàng)建script和動態(tài)創(chuàng)建的img賦值src時為什么不同。

動態(tài)創(chuàng)建script和動態(tài)創(chuàng)建的img賦值src時為什么不同。

在動態(tài)創(chuàng)建script和動態(tài)創(chuàng)建img的過程中,為什么img賦值src之后能立即請求資源,而script必須添加到頁面中才能加載資源

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript">
        
        window.onload = function(){
            var img = new Image();
            img.src = './function.JPG';
            img.onload = function(){
                console.log('圖片加載完畢');
            }

            setTimeout(function(){
                console.log('10秒之后執(zhí)行');
                document.getElementsByTagName('body')[0].appendChild(img);
            },10000)
            /*
                圖片加載完畢
                10秒之后執(zhí)行   --->等待10s
            */

            //測試是否和createElement有關(guān)
            var img2 = document.createElement('img');
            img2.src = './function.JPG';
            img2.onload = function(){
                console.log('圖片加載完畢');
            }

            setTimeout(function(){
                console.log('10秒之后執(zhí)行');
                document.getElementsByTagName('body')[0].appendChild(img);
            },10000)
            /*
                圖片加載完畢
                10秒之后執(zhí)行   --->等待10s
            */


            var script = document.createElement('script');
            script.src = './zepto源碼.js';
            script.onload = function(){
                console.log('script加載完畢');
            }
            setTimeout(function(){
                console.log('10秒之后執(zhí)行');
                document.getElementsByTagName('body')[0].appendChild(script);
            },10000)
            /*
                10秒之后執(zhí)行   --->等待10s
                script加載完畢
            */
        }
    </script>
</body>
</html>

都是給動態(tài)創(chuàng)建的script和img賦值,為什么img就能直接請求,script是添加到頁面才會請求?并且第二個測試說明和document.createElement沒關(guān)系啊。。

回答
編輯回答
乖乖噠

我的理解是,圖片本身就是一個元素,你直接訪問圖片的地址時,是可以展示這個圖片的,不需要依賴頁面。
但是js不一樣,js必須依賴瀏覽器頁面這樣一個執(zhí)行環(huán)境,才能執(zhí)行,你瀏覽器直接訪問一個js,得到的其實只是一堆字符串而已。

imgscript本身就是不一樣的。所以瀏覽器才會有這種特性:img就能直接請求,script是添加到頁面才會請求。

自己的理解,不一定對。

2017年6月24日 01:14
編輯回答
伐木累

這個是瀏覽器處理或者規(guī)范要求的
img可以直接加載還有一個原因是可以方便預(yù)加載處理,以提升體驗,而js并不需要這樣的處理,而且往往js的執(zhí)行會影響到html顯示,所以需要專門進(jìn)入到html位置后才實際加載比較恰當(dāng)。

2018年8月17日 18:13