1. 箭头函数不能当作构造函数,即不能使用new命令
2. 不能使用arguments对象,函数体内不存在该对象。可使用rest参数代替。
3. this指向问题(重点)。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
var name = 'window'
var log = console.log.bind(console)
var o = {
name: 'o',
getName: function() {
var name = 'getName'
return this.name
},
getName2: () => {
var name = 'getName2'
return this.name
}
}
//匿名函数this指向调用对象
log(o.getName()) //o
//call与apply更改调用对象
log(o.getName.call(window)) //window
//箭头函数没有自己的this,绑定为函数词法作用域的this的指向,既o的this的指向,window
log(o.getName2()) //window
log(o.getName2.call({name: 'tmp'})) //window
log('-------------------')
//箭头函数的优势
var o2 = {
name: 'o2',
getName: function() {
var fun = function() {
return this.name
}
return fun()
},
getName2: function() {
var fun = () => this.name
return fun()
}
}
log(o2.getName()) //window
log(o2.getName.call(o2)); //window
//无法改变this的指向,此处只能改变o2.getName()的this指向,并不能改变返回的函数的this指向,
//又因为非严格模式下,this为undefined时默认指向window
//则实际为window.function() {...}
//this指向window
(function() {
var name = 'immediate execution function'
log(o2.getName()) //同上道理
})()
log(o2.getName2()) //o2
//绑定为getName2的词法作用域的this指向
log(o2.getName2.call(window)) //window
//因为o2.getName2的this指向改变了,所以箭头函数的指向跟着改变
</script>
</body>
</html>
至此。