为什么箭头函数不会出现四递归调用的问题?

来源:3-10 Vue的组件之高级属性

qq_缺南摸了个北_0

2019-02-15

const obj = {}
// 
Object.defineProperty(obj, 'value', {
  get: () => {
    return this.value
  },
  set: (val) => {
    this.value = val
  }
})

obj.value = '李四'
console.log(obj.value)

正确输出:

李四

使用 Function

Object.defineProperty(obj, 'test', {
  get: function () {
    return this.test
  },
  set: function (val) {
    this.test = val
  }
})
obj.test = 'functional'

结果:

 Maximum call stack size exceeded
写回答

1回答

李英奇

2019-02-17

this是什么?

    预编译阶段:当一个函数被调用时,会创建一个活动记录(执行上下文),这个记录里面有调用位置,调用栈,传入的参数和一些标识符,this就是这些记录里面的一个属性;

    箭头函数this指向根据外层的函数或者全局作用域来决定this;

        第一个例子this指向window, 

        第二个例子this指向 obj对象,导致重复调用set方法

   


2
2
qq_缺南摸了个北_0
那相当于是 obj.value 返回的实际上是 window.value 的值吗?
2019-02-17
共2条回复

Vue核心技术 Vue+Vue-Router+Vuex+SSR实战精讲

深入讲解Vue核心技术,展示Vue应用开发中的各种问题和解决方案

3168 学习 · 853 问题

查看课程