Javascript 这是箭头函数的值
我试图理解ECMAScript 6中的箭头函数 这是我在阅读时遇到的定义: 箭头函数具有隐式Javascript 这是箭头函数的值,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,我试图理解ECMAScript 6中的箭头函数 这是我在阅读时遇到的定义: 箭头函数具有隐式此绑定,这意味着 此箭头函数内的值为 与箭头作用范围内的此的值相同 是定义 根据定义,我认为对于箭头函数而言,此应包含与箭头函数中定义的相同的块级值 代码: 然而,我从代码中得到了这个结果 function testfunc() { return console.log(undefined); } 我认为我会得到的结果是: {"laptop": "ramen"} 如果我运行这个 console
此
绑定,这意味着
此
箭头函数内的值为
与箭头作用范围内的此
的值相同
是定义
根据定义,我认为对于箭头函数
而言,此
应包含与箭头函数中定义的相同的块级值
代码:
然而,我从代码中得到了这个结果
function testfunc() {
return console.log(undefined);
}
我认为我会得到的结果是:
{"laptop": "ramen"}
如果我运行这个
console.log(test.k.testfunc())代码>让我们转换成等效的ES5代码:
var test = {
id: "123123",
k: {
laptop: "ramen",
testfunc: function(){return console.log(this)}.bind(this)
}
}
请记住,此
取决于调用函数的方式。外部此
不在函数内部,因此在严格模式下默认为未定义
简化方案如下:
console.log(this) // undefined
var test = {
a: this // same `this` as above
}
您在定义变量测试的同一范围内定义箭头函数。如果在全局范围中定义test
,则箭头函数的上下文也将是全局范围
如果在方法内部定义测试,则arrow函数将共享该方法的上下文
function method() {
const self = this;
const test = {
foo: () => console.log(self === this);
}
test.foo()
// console: true
}
使用console.log(test.k.testfunc())时代码>在FF中(注意末尾的括号),我得到了一个对窗口的引用。这是正确的,因为在定义函数时,在我的例子中,当前范围是window
。这应该有助于解释:“this”。看到我在那里做了什么了吗?@natebarbettini箭头函数从其封闭范围(函数范围)继承“this”,所以有趣的是,这将起作用-testfunc:function(){()=>{console.log(this)}()}
function method() {
const self = this;
const test = {
foo: () => console.log(self === this);
}
test.foo()
// console: true
}