首先我知道:
建议不要使用with语句,因为它可能是来源 混乱的错误和兼容性问题。请参阅" Ambiguity Con" "描述"中的段落以下部分详情。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with
BUT
如果我们采用这样一个简单的函数(这个功能很棒)
function loadImage(url,cb){
with(new Image)
onload=cb,
src=url
}
我们注意到没有任何 CONFUSING 可以破坏函数闭包内的代码。我们使用的唯一两个变量是onload
& src
。在我不创建名为variables, objects,arrays or functions
或onload
的{{1}}之前,不应该发生任何不好的事情。
说,我的问题是:
javascript垃圾收集器应该在执行后直接将src
添加到集合中吗?
因此对内存的影响小于标准函数:
new Image
在上面的例子中,function loadImage(url,cb){
var image=new Image;
image.onload=cb;
image.src=url;
}
保留在函数内部,直到我执行一个新函数。
顺便说一句。代码也会短得多。
var image
使用
进行演示答案 0 :(得分:1)
首先我知道:不建议使用with语句,因为它可能是混淆错误和兼容性问题的根源
不,with
语句的主要问题是它会阻止某些静态优化,因为它在运行时引入了新的变量名 。这也是forbidden in ES 5 strict mode code的原因。
使用with语句对内存的影响要小于标准函数
没有。 它们的表现完全相同。当函数结束时,new Image
/ image
不再适用于任何范围。 image
变量将以与with
语句以结束括号结尾相同的方式消失。
javascript垃圾收集器应该在执行后直接将
new Image
添加到集合中吗?
实际上,我并不认为该对象是垃圾收集的。它是一个DOM元素,有一个等待它的活load
处理程序,我认为它仍然是从事件循环队列引用的。但是,我认为这对你的问题并不重要。