NodeJS提示中的“ this”值(已声明与表达式函数进行对比)

时间:2019-08-21 19:51:20

标签: javascript

我正在为this关键字苦苦挣扎。我正在比较声明的函数中与{em>表达式函数中的this的值。

// Declared function
function declaredFunction() { console.log(this); }

// Expression function
var expressionFunction = (() => { console.log(this); }) ;

我在this.js文件中定义了这两个文件,并使用简单的node this.js命令运行它。

declaredFunction();
expressionFunction();

declaredFunction()global对象记录在控制台中:

Object [global] {
  global: [Circular],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] { [Symbol(util.promisify.custom)]: [Function] },
  queueMicrotask: [Function: queueMicrotask],
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(util.promisify.custom)]: [Function]
  }
}

expressionFunction()仅记录{}

两个问题:

  1. {}是什么(显然是一个空对象,但从语义的角度来看,我不理解它是什么);和
  2. 为什么我的expressionFunction()也没有记录global对象?

关于声明函数将函数表达式分配给变量的区别,我肯定不了解。

1 个答案:

答案 0 :(得分:-1)

当前,您正在将定义JavaScript函数的“标准”方式与“较新的”箭头功能进行比较。您可以阅读有关here的更多信息。

从网站上

  

箭头函数表达式在语法上是常规函数表达式的紧凑选择,尽管没有与this,arguments,super或new.target关键字的绑定。箭头函数表达式不适合用作方法,不能用作构造函数。

总结起来,这意味着箭头功能中的this关键字将打印一个对象(在程序的全局范围内定义),而标准对象将打印空对象(在自己的对象中定义)范围)。

我个人而言,我在项目中越来越多地使用箭头功能,因为有时您不希望该功能创建自己的作用域,而是希望this指向主要作用域。