let fun = function(()=>{
console.log(123);
})
箭头函数是匿名函数,不能作为构造函数,不能使用new
箭头函数不绑定arguments,取而代之用rest参数...解决
箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己的this值
箭头函数没有原型属性
箭头函数不能当做Generator函数,不能使用yield关键字
解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout和setInterval中使用this所造成的问题
匿名函数的执行环境是全局的,而且this只在函数内部起作用
this
在全局环境下,this 始终指向全局对象(window), 无论是否严格模式;
函数中:
普通函数内部的this分两种情况,严格模式和非严格模式。
非严格模式下,this 默认指向全局对象window
而严格模式下, this为undefined
functionf2(){ "use strict";// 这里是严格模式returnthis;}f2() ===undefined;// true
对象中:
对象内部方法的this指向调用这些方法的对象,
函数的定义位置不影响其this指向,this指向只和调用函数的对象有关。
多层嵌套的对象,内部方法的this指向离被调用函数最近的对象(window也是对象,其内部对象调用方法的this指向内部对象, 而非window)。
var o = {
prop: 37,
f: function(){
return this.prop;
}
};
console.log(o.f()); //37
var a = o.f;
console.log(a()): //undefined
var o = {prop: 37};
function independent(){
return this.prop;
}
o.f = independent;console.log(o.f()); // logs 37
o.b = {
g: independent,
prop: 42
};
console.log(o.b.g()); // logs 42
原型链中this:
谁调用指向谁,当前对象找不到的话,根据原型链向上去找
构造函数中this
构造函数中的this与被创建的新对象绑定。
注意:当构造器返回的默认值是一个this引用的对象时,可以手动设置返回其他的对象,如果返回值不是一个对象,返回this。
functionC2(){
this.a = 37;
return {a:38};
}
var b = new C2();
console.log(b.a); // logs 38
总结:
箭头函数的this永远指向其上下文的this,任何方法都改变不了其指向,如call(),bind(),apply()
普通函数的this指向调用它的那个对象