jQuery 源码的疑问

yy102198 2012-10-22 10:29:01
看jquery源码 在 extend函数里面有个疑问

// Prevent never-ending loop
if ( target === copy ) {
continue;
}
在深度拷贝里面,上述代码为了防止死循环,但是我怎么也想不出来,
如果没有上面的代码,在深度拷贝中会出现死循环的例子??

神们给个例子
...全文
131 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaihuzhijie 2012-10-24
  • 打赏
  • 举报
回复
自我拷贝会导致 too much recursion (无限递归)
woaihuzhijie 2012-10-24
  • 打赏
  • 举报
回复
var a={a:a};$.extend(true,a,a);
「已注销」 2012-10-23
  • 打赏
  • 举报
回复

这行代码是为了避免循环引用,当第一个参数为 true 时会执行深拷贝,例如:

var obj = {jQueryRef: jQuery};
jQuery.extend(true, obj);

将ojb属性深度拷贝到jQuery, 当运行到
if ( target === copy ) {
continue;
}

, target 为jQuery, copy为 obj.jQueryRef时,忽略 后面的递归调用
target[ name ] = jQuery.extend( deep, clone, copy )

希望能帮到你。
yy102198 2012-10-22
  • 打赏
  • 举报
回复
先给自己顶顶
dingding
jQuery本质上就是用javascript代码写成的各种方法的集合。但是javascript本身不是已经提供了各种各样的方法和功能了吗?为什么还要再另外写一个库出来呢?原因其实很好猜,那肯定是我们要写的这个库比javascript提供的原生方法更好用了,对吧?恩,到这里我们似乎得到了一个基本需求:写一个比原生javascript提供的方法集更好用的库。这个需求的关键在于“更好用”三个字。怎么才是“更好用”呢? 我们知道一个原则:结构、表现、行为相分离。javascript是负责其中的“行为”的。谁的行为?网页元素的行为。什么样的行为?变化。也就是说,javascript是负责使网页元素发生变化的,对不对?那么要使网页元素发生变化要怎么做呢?很简单,只需要通过两步: 确定要让哪一个网页元素发生变化。 确定要使这个元素发生什么样的变化。 从上面两个步骤我们可以总结出javascript工作的基本流程: 选取目标元素 操作目标元素实现功能(使目标元素发生变化) 根据这个基本流程,对于上面“更好用”的疑问,我们就有了一个初步的比较具体的答案了:“更好用”指的是“更好的元素选择器”和“更好的功能方法集”。好了,到了这里,我们的需求就更加清晰了: ———————————————— 版权声明:本文为CSDN博主「IAmFineAndYou」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/software0017/article/details/80317348

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧