jQuery.clone方法有副作用吗?

时间:2016-07-15 12:21:20

标签: javascript jquery google-closure-compiler

如果$ dom是一个jQuery元素,

如果在{<1>}后没有使用{<1}},可以安全删除此行吗?

a

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

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

问题的目的是确定$dom.clone(false,false)的{​​{1}}是否存在@nosideeffects的外部定义中的错误:https://github.com/google/closure-compiler/blob/master/contrib/externs/jquery-1.9.js#L405

1 个答案:

答案 0 :(得分:2)

根据Closure Compiler对“无副作用”的定义,是否缺少该注释是一个错误,这在很大程度上取决于Google。 : - )

至少在jQuery 1.x中,用.clone调用true, true会改变jQuery的状态信息,的信息只会保留返回的元素并与之关联最终由a引用的jQuery对象:jQuery的元素数据缓存(用于“数据”和事件处理程序信息)不存储在元素本身上,它存储在jQuery中的结构中通过元素上的expando属性键入。所以它不是一个真正纯粹的功能;它改变了某种状态:jQuery的数据缓存。

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