Javascript:通过Javascript加载图像

Javascript:通过Javascript加载图像,javascript,html,image,Javascript,Html,Image,这是一段来自教程的javascript代码,在教程中,他们试图将图像加载到画布上,然后进行一些操作。我省略了大部分不相关的代码,以便更容易理解 1) 我无法理解为什么包含图像文件名的行总是放在imageObj.onload函数下面。这有关系吗?图像从什么时候开始加载 2) 如果我忘记输入图像文件的源代码,会发生什么 <script> window.onload = function(){ ....

这是一段来自教程的javascript代码,在教程中,他们试图将图像加载到画布上,然后进行一些操作。我省略了大部分不相关的代码,以便更容易理解

1) 我无法理解为什么包含图像文件名的行总是放在imageObj.onload函数下面。这有关系吗?图像从什么时候开始加载

2) 如果我忘记输入图像文件的源代码,会发生什么

<script>
            window.onload = function(){
                ....

                var imageObj = new Image();

                imageObj.onload = function(){
                    ....
                    ....
                    });

                    ....
                    ....

                };
                imageObj.src = "yoda.jpg";

            };
        </script>

window.onload=函数(){
....
var imageObj=新图像();
imageObj.onload=函数(){
....
....
});
....
....
};
imageObj.src=“yoda.jpg”;
};

通过设置
.src
属性触发加载

在(某些?)较旧的浏览器上,如果在设置属性后注册处理程序,则不会调用该处理程序,特别是如果图像已在缓存中,因此会立即“加载”


如果忘记设置属性,则不会发生任何事情。

在设置
src
属性时开始加载。成功加载映像后将调用
img.onload
函数。

更改
src
将触发“加载顺序”,并且由于JS的性质是按顺序执行,因此在加载映像之前必须注册处理程序


不更改
src
不会触发加载顺序。

这是一个有点历史性的问题。
.onload
.src
的顺序实际上并不重要(从技术上讲,这两种顺序都有效),问题是一旦设置了
src
属性,一些浏览器(一些=Internet Explorer)将从缓存中获取图像(如果可用)

这就是为什么在设置
src
之前,您应该始终声明一个
onload
处理程序

如果您只是忘记设置
src
属性,那么什么也不会发生。如果您不再持有该对象的任何引用或闭包,它将尽快被垃圾收集

window.onload = function(){
                // This is function 1 
                // This portion will execute when window has loaded completely.
                // In simple words, page has been downloaded completely.

                var imageObj = new Image();

                imageObj.onload = function(){
                    // This is function 2
                   // This portion will execute when image has loaded completely 
                    });

                    ....
                    ....

                };
                imageObj.src = "yoda.jpg";
因此,函数1和函数2将在此行之后执行
imageObj.src=“yoda.jpg”

这是你第一个问题的答案。放在下面并不意味着它将在函数2之后执行。在javascript中,代码从上到下顺序执行,但函数中的代码只有在调用该函数时才会执行


如果您不提供
src
属性,则将没有图像可下载,因此不会调用函数2。

您是否尝试过不将图像文件的源代码放入以查看会发生什么?如果您从
.onload
.src
切换顺序,它也将在所有浏览器中工作。顺序很可能是因为InternetExplorer的缓存问题,InternetExplorer在设置
.src
后立即从缓存中获取图像。@jAndy请让您对答案进行评论,因为这里给出的三个答案在这一点上都是错误的。@jAndy是的,这完全正确,但不幸的是,我们仍然必须支持旧的MSIE版本:(