1. 別在頁面加載完后再document.write(),那樣的話會(huì)丟失之前的內(nèi)容。
<button onclick="myFunction()">點(diǎn)擊這里</button>
<script>
function myFunction()
{
document.write("糟糕!文檔消失了。");
}
</script>
2. 函數(shù)聲明與函數(shù)表達(dá)式在代碼執(zhí)行中的不同:
解析器在向執(zhí)行環(huán)境中加載數(shù)據(jù)時(shí),對(duì)函數(shù)聲明和函數(shù)表達(dá)式并非一視同仁。解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可用(可以訪問);至于函數(shù)表達(dá)式,則必須等到解析器執(zhí)行到它所在的代碼行,才會(huì)真正被解釋執(zhí)行。
alert(sum(10,10)); //因?yàn)槭呛瘮?shù)聲明先解釋后執(zhí)行的原因所以可以正常執(zhí)行。
function sum(num1, num2){
return num1 + num2;
}
- this在addEventListener中的bug:
//定義一個(gè)可見的盒子用于綁定點(diǎn)擊事件
var box = document.getElementById('box');
box.x = 'box'
//設(shè)置執(zhí)行函數(shù)的對(duì)象屬性
function outFunc() {
this.x = 'outFunc';
box.addEventListener('click', func, false);
}
outFunc();
function func() {
console.log(this.x); //輸出box 說明該this指向的是調(diào)用addEventListener的對(duì)象
}
changeLikeText () {
const likeText = this.el.querySelector('.like-text')
this.state.isLiked = !this.state.isLiked
likeText.innerHTML = this.state.isLiked ? '取消' : '點(diǎn)贊'
}
this.el.addEventListener('click', this.changeLikeText, false)
// 錯(cuò)誤
this.el.addEventListener('click', this.changeLikeText.bind(this), false)
// 正確
當(dāng)函數(shù)作為方法調(diào)用時(shí),this指向調(diào)用該方法的對(duì)象, 當(dāng)函數(shù)作為嵌套函數(shù)調(diào)用時(shí), this指向全局對(duì)象(非嚴(yán)格模式下)或者undefined(嚴(yán)格模式)而不是其外包函數(shù)的上下文