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(严格模式)而不是其外包函数的上下文