jQuery.clone 方法有副作用吗?

Does the jQuery.clone method have side effects?

如果 $dom 是一个 jQuery 元素,

如果 a 之后不使用,是否可以安全删除此行?

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

作为克隆方法dom,我认为$dom.clone(false,false)没有side effects。如果认为该方法也不会抛出错误。我更怀疑事件的克隆。我想如果克隆的元素没有重新附加,它就没有效果,但我不确定。是否有任何事件可以传播到分离的 dom 事件? (如果是,那么我不确定我们是否可以安全地删除该行)

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

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

根据 Closure Compiler 对 "no side effects" 的定义,该注释的缺失是否是错误取决于 Google。 :-)

至少在 jQuery 1.x 中,用 true, true 调用 .clone 会改变 jQuery 的状态信息, 不会't 只保留返回的元素并与最终被 a 引用的 jQuery 对象相关联:jQuery 元素的数据缓存(用于"data" 和事件处理程序信息)不存储在元素本身上,它存储在 jQuery 中的结构中,该结构由 expando [=37] 键控 =] 在元素上。所以它不是一个真正的纯函数;它改变了某些东西的状态:jQuery 的数据缓存。

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