箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。
var obj = {
birth: 1990,getAge: function () {
var b = this.birth; // 1990
var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
return fn();
}
};
obj.getAge(); // 25
词法作用域(lexical scope)等同于静态作用域(static scope)。所谓的词法作用域其实是指作用域在词法解析阶段既确定了,不会改变。
箭头函数就是个简写形式的函数表达式,并且它拥有词法作用域的this值(即不会新产生自己作用域下的this,arguments,super 和 new.target 等对象)。此外,箭头函数总是匿名的。
箭头函数则会捕获其所在上下文的 this 值,作为自己的 this 值,因此下面的代码将如期运行。
使用 new 操作符 (箭头函数不能用作构造器,和 new 一起用就会抛出错误。)
箭头函数,就是没有自身this属性的函数。直接在它的静态作用域找最近的函数的this. 非严格模式,函数this初始化为window/global;严格模式,函数初始化为undefined.(当然,普通函数this有绑定(指向引用)时,内部的箭头函数this指向便是此引用)
我想说啥,其实是 箭头函数只会沿着它的作用链找到最近的普通函数为止。(因为有this初始化啊)
使用注意
new Promise((res) => {res();}) //true
new Promise((res) => res()) //true
new Promise((res) => res();) //error (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|