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