javascript – jQuery.clone方法有副作用吗?

如果$dom是一个jQuery元素,

如果之后没有使用过,那么该行可以安全删除吗?

var a = $dom.clone(true,true);

由于方法克隆了dom,我认为$dom.clone(false,false)没有side effects.如果认为该方法也不能抛出错误.我对事件的克隆持怀疑态度.我想如果克隆元素没有重新附加,它没有效果,但我不确定.是否有任何事件可以传播到分离的dom事件? (如果是,那么我不确定我们能否安全地移除该线)

https://api.jquery.com/clone/

问题的目的是确定是否缺少@nosideeffects是.clone()的externs定义中的错误:https://github.com/google/closure-compiler/blob/master/contrib/externs/jquery-1.9.js#L405

最佳答案 根据Closure Compiler对“无副作用”的定义,是否缺少该注释是一个错误,这在很大程度上取决于Google. 🙂

在至少jQuery 1.x中,使用true调用.clone,true会改变jQuery的状态信息,信息不仅仅包含返回的元素,而是与jQuery对象相关联,最终由jQuery引用的元素: (它既用于“数据”又用于事件处理程序信息)不存储在元素本身上,它存储在jQuery中的结构中,该结构由元素上的expando属性键入.所以它不是一个真正纯粹的功能;它改变了某些东西的状态:jQuery的数据缓存.

在jQuery 2.x及更高版本中,我相信信息存储在元素本身上(因为2.x及以上版本不支持IE6和IE7,它们无法正确地跨越DOM / JS边界执行GC).

点赞