$(document).ready() 和window.onload()的区别是什么?
window.onload是一个事件,当文档加载完成之后就会触发该事件,可以为此事件注册事件处理函数,并将要执行的脚本代码放在事件处理函数中,于是就可以避免获取不到对象的情况。
$(document).ready(function() { })的作用也是等相应的DOM结构加载完成之后再执行相应的脚本
两者的区别:
1、执行时间的不同:
window.onload是等页面所有的资源包括图片、文档等等加载完毕之后才执行相应的代码。
$(document).ready(function() { })就是等文本的DOM结构绘制完毕之后,并不一定加载完后执行。
2、编写的个数不同
在同一个页面中使用 以下格式代码来绑定多个事件是不生效。
window.onload = function a() { };
window.onload = function b() { };
只能通过这种的方式达到绑定多个事件处理函数的效果。
window.onload = function () {
function a() { };
function b() { };
}
$(document).ready(function() { }) 可以同时编写多个。
3、简化方法的不同
window.onload没有简化的方法
$(document).ready(function() { })可以简化成:$.(function() { })
$.extend深拷贝怎么做?
$.extend的浅拷贝:
var a = {
name : 'zhangshan',
age : 28,
company : {
name : '腾讯',
address : '深圳',
size : 10000
}
};
var b = {
name : 'lisi',
age : 30,
company : {
name : '阿里巴巴',
address : '杭州'
},
stature : '172cm'
};
var c = $.extend(a,b);
console.log('a:' + JSON.stringify(a));
console.log('b:' + JSON.stringify(b));
console.log('c:' + JSON.stringify(c));
输出结果:
a:{"name":"zhangshan","age":28,"company":{"name":"腾讯","address":"深圳","size":10000}}
b:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州"},"stature":"172cm"}
c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州"},"stature":"172cm"}
浅拷贝:当b里面是基本类型的数据的时候就直接复制对应的值,当b里面是一个引用类型,就把该该指针指向的的堆内存的地址复制给a. 如果b中指向堆内存的地址改变了,那么a中的指向该堆内存的指针也变了。
var a = {
name : 'zhangshan',
age : 28,
company : {
name : '腾讯',
address : '深圳',
size : 10000
}
};
var b = {
name : 'lisi',
age : 30,
company : {
name : '阿里巴巴',
address : '杭州'
},
stature : '172cm'
};
var c = $.extend(true,a,b);
console.log('a:' + JSON.stringify(a));
console.log('b:' + JSON.stringify(b));
console.log('c:' + JSON.stringify(c));
a:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州","size":10000},"stature":"172cm"}
b:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州"},"stature":"172cm"}
c:{"name":"lisi","age":30,"company":{"name":"阿里巴巴","address":"杭州","size":10000},"stature":"172cm"}
深拷贝后修改任何一个拷贝对象所指向的内存地址,都不会影响到目标对象的值。
jQuery的链式调用的原理是什么?
调用jQuery对象上的API时返回的都是本对象——this,因为返回的都是同一个对象,所以可以使用链式调用的方式,减少代码量,提高代码效率。