jQuery.extend()
对普通对象和数组进行深拷贝,但不是对函数对象进行深拷贝。
由于x
它是一个函数对象,因此它不会对其进行深层复制。
但由于y
是一个普通对象,它确实会尝试进行深度复制并陷入无限循环。
来自 jQuery.extend()
源代码:
// Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && jQuery.isArray(src) ? src : [];
} else {
clone = src && jQuery.isPlainObject(src) ? src : {};
}
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
您可以看到它正在检查该属性是普通对象还是数组。函数对象也不会。