无需实例化的Javascript图像对象

无需实例化的Javascript图像对象,javascript,Javascript,这个问题是关于javascript性能的。考虑3个例子说明: function loadImgA() { new Image().src="http://example.com/image.gif" } function loadImgA1() { Image().src="http://example.com/image.gif" } function loadImgB() { var testImg = new Image(); testImg.src="

这个问题是关于javascript性能的。考虑3个例子说明:

function loadImgA() {
    new Image().src="http://example.com/image.gif"
}

function loadImgA1() {
    Image().src="http://example.com/image.gif"
}

function loadImgB() {
    var testImg = new Image();
    testImg.src="http://example.com/image.gif"
}
现在的重点是,我不需要在创建图像对象后对其进行操作,因此loadImgA()。问题是,如果没有为new Image()构造函数的返回值赋值,会发生什么情况?在这种情况下,我实际上可以跳过loadImgA1()中的“new”关键字?对象是否存在于函数之外,或者以某种方式影响内存使用?其他含义、差异?我想不会,因为实际上没有创建任何真实的实例

为了更好地理解这一点,我只需要通过http请求获取图像。无需预加载或其他高级图像处理。上面的首选方法是什么?

使用
Image()
而不使用
new
关键字将抛出错误。在您的示例中,
loadImgA()
loadImgB()
将具有相同的最终结果,因为函数没有返回任何内容,也没有使用
testImg
变量创建闭包

关于内存使用,
newimage()
document.createElement(“img”)
的别名。当DOM元素在函数的作用域中创建且未添加到文档中时,当所有闭包都完成时,该元素应标记为垃圾收集并从内存中删除。一个实例实际上是创建的,只是没有添加到DOM中,所以当不再使用时它会被销毁

我看到的唯一真正的问题是,当映像对象被销毁时,它们上的任何当前http请求都可能被销毁。如果是这种情况,您可能需要使用
onload
onerror
事件处理程序在图像加载后或出现问题时进行清理。

使用
image()
而不使用
new
关键字将抛出错误。在您的示例中,
loadImgA()
loadImgB()
将具有相同的最终结果,因为函数没有返回任何内容,也没有使用
testImg
变量创建闭包

关于内存使用,
newimage()
document.createElement(“img”)
的别名。当DOM元素在函数的作用域中创建且未添加到文档中时,当所有闭包都完成时,该元素应标记为垃圾收集并从内存中删除。一个实例实际上是创建的,只是没有添加到DOM中,所以当不再使用时它会被销毁


我看到的唯一真正的问题是,当映像对象被销毁时,它们上的任何当前http请求都可能被销毁。如果是这种情况,您可能需要使用
onload
onerror
事件处理程序在图像加载后或出现问题时进行清理。

谢谢。我认为相同的Image()是w3c document.createElement(“img”)的快捷方式,但有一些建议说明为什么它可能不是精确的1:1:使用Image()而不使用new关键字确实是不正确的。关于删除http请求的观点可能是有效的,尽管我无法确认。@user276027:谢谢链接,这是一篇有趣的文章。谢谢Andy。我认为相同的Image()是w3c document.createElement(“img”)的快捷方式,但有一些建议说明为什么它可能不是精确的1:1:使用Image()而不使用new关键字确实是不正确的。关于删除http请求的观点可能是有效的,尽管我无法确认。@user276027:感谢链接,这是一篇有趣的文章。