$(document).ready() 和window.onload()的區(qū)別是什么?
window.onload是一個(gè)事件,當(dāng)文檔加載完成之后就會(huì)觸發(fā)該事件,可以為此事件注冊(cè)事件處理函數(shù),并將要執(zhí)行的腳本代碼放在事件處理函數(shù)中,于是就可以避免獲取不到對(duì)象的情況。
$(document).ready(function() { })的作用也是等相應(yīng)的DOM結(jié)構(gòu)加載完成之后再執(zhí)行相應(yīng)的腳本
?兩者的區(qū)別:
1、執(zhí)行時(shí)間的不同:
window.onload是等頁面所有的資源包括圖片、文檔等等加載完畢之后才執(zhí)行相應(yīng)的代碼。
$(document).ready(function() { })就是等文本的DOM結(jié)構(gòu)繪制完畢之后,并不一定加載完后執(zhí)行。
2、編寫的個(gè)數(shù)不同
在同一個(gè)頁面中使用 以下格式代碼來綁定多個(gè)事件是不生效。
window.onload = function a() { };
window.onload = function b() { };
只能通過這種的方式達(dá)到綁定多個(gè)事件處理函數(shù)的效果。
window.onload = function () {
function a() { };
function b() { };
}
$(document).ready(function() { }) 可以同時(shí)編寫多個(gè)。
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));
輸出結(jié)果:
?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"}
淺拷貝:當(dāng)b里面是基本類型的數(shù)據(jù)的時(shí)候就直接復(fù)制對(duì)應(yīng)的值,當(dāng)b里面是一個(gè)引用類型,就把該該指針指向的的堆內(nèi)存的地址復(fù)制給a.? 如果b中指向堆內(nèi)存的地址改變了,那么a中的指向該堆內(nèi)存的指針也變了。
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"}
深拷貝后修改任何一個(gè)拷貝對(duì)象所指向的內(nèi)存地址,都不會(huì)影響到目標(biāo)對(duì)象的值。
jQuery的鏈?zhǔn)秸{(diào)用的原理是什么?
調(diào)用jQuery對(duì)象上的API時(shí)返回的都是本對(duì)象——this,因?yàn)榉祷氐亩际峭粋€(gè)對(duì)象,所以可以使用鏈?zhǔn)秸{(diào)用的方式,減少代碼量,提高代碼效率。