Javascript 这是箭头函数的值

Javascript 这是箭头函数的值,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,我试图理解ECMAScript 6中的箭头函数 这是我在阅读时遇到的定义: 箭头函数具有隐式此绑定,这意味着 此箭头函数内的值为 与箭头作用范围内的此的值相同 是定义 根据定义,我认为对于箭头函数而言,此应包含与箭头函数中定义的相同的块级值 代码: 然而,我从代码中得到了这个结果 function testfunc() { return console.log(undefined); } 我认为我会得到的结果是: {"laptop": "ramen"} 如果我运行这个 console

我试图理解ECMAScript 6中的箭头函数

这是我在阅读时遇到的定义:

箭头函数具有隐式
绑定,这意味着
箭头函数内的值为 与箭头作用范围内的
的值相同 是定义

根据定义,我认为
对于
箭头函数
而言,此
应包含与箭头函数中定义的相同的块级值

代码:

然而,我从代码中得到了这个结果

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
}