Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么this.add不是对象上下文中的函数_Javascript_Arrow Functions - Fatal编程技术网

Javascript 为什么this.add不是对象上下文中的函数

Javascript 为什么this.add不是对象上下文中的函数,javascript,arrow-functions,Javascript,Arrow Functions,在下面的示例中,我不清楚为什么没有定义this.add。我怀疑这是因为arrows函数是在编译时立即执行的,add函数还不存在。这个假设正确吗?或者我错过了什么 const arr= [1, 2, 3] const squares = { num: (arr) => { return arr.map((x) => { return (x * x) + this.add() }) }, add: () => { return 1

在下面的示例中,我不清楚为什么没有定义
this.add
。我怀疑这是因为arrows函数是在编译时立即执行的,
add
函数还不存在。这个假设正确吗?或者我错过了什么

const arr= [1, 2, 3]
const squares = {  
  num: (arr) => {
    return arr.map((x) => {
      return (x * x) + this.add()
    })
  },
  add: () => {
    return 1
  }
}
//TypeError: this.add is not a function
console.log(squares.num(arr)) 

您一直在使用
词法this
。您需要避免对
num
使用箭头函数:

见:

“箭头函数表达式的语法比函数表达式短,并且不绑定自己的此…”

const arr=[1,2,3]
常数平方={
num:函数(arr){
返回arr.map((x)=>{
return(x*x)+this.add()
})
},
添加:()=>{
返回1
}
}

console.log(squares.num(arr))
上一个示例中“this”的词法范围表示仅在arrow函数中可用?@James:这意味着箭头函数中的
这个
指的是
这个
在定义
正方形和
arr
的范围内所指的任何东西。。。它的工作原理与您期望的任何其他变量的工作原理完全相同。用作方法的箭头函数:如前所述,箭头函数表达式最适合于非方法函数。2). 箭头函数不创建自己的this,而是使用封闭执行上下文的this值。@James,很抱歉响应太晚,我需要离开我的计算机。我很高兴您能够理解这一点,并找到了解释其工作原理的其他文档。