Javascript ES6语法与声明方法的区别

Javascript ES6语法与声明方法的区别,javascript,vue.js,ecmascript-6,Javascript,Vue.js,Ecmascript 6,我还不太熟悉所有ES6语法,我开始学习Vue.js,它广泛使用了它。所以,我发现了一些让我有点困惑的事情: 这两种方法有什么区别 const actions = { foo1(num) { console.log(num); }, foo2: (num) => { console.log(num); } } actions.foo1(2); actions.foo2(3); // output: 2 // output: 3 我猜它们不一样,尽管它

我还不太熟悉所有ES6语法,我开始学习Vue.js,它广泛使用了它。所以,我发现了一些让我有点困惑的事情:

这两种方法有什么区别

const actions = {
  foo1(num) {
    console.log(num);
  },
  foo2: (num) => {
    console.log(num);
  }
}

actions.foo1(2);

actions.foo2(3);

// output: 2

// output: 3

我猜它们不一样,尽管它们都输出传递的值。

第一个是现有的函数定义,而第二个是声明arrow函数(使用ES6 fat arrow语法)。它们在保留
this
的值方面是不同的。箭头函数无法访问对象元素,但在这种情况下,您不是指
this
,这就是为什么您的输出是相同的。一个很好的例子是在
setTimeOut
中递增一个全局变量。如果您使用箭头函数,它不会创建自己的作用域,而是从调用它的地方引用
这个
。@trincot谢谢。编辑最有可能给您带来问题的差异: