我正在为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()
仅记录{}
。
两个问题:
{}
是什么(显然是一个空对象,但从语义的角度来看,我不理解它是什么);和expressionFunction()
也没有记录global
对象?关于声明函数与将函数表达式分配给变量的区别,我肯定不了解。
答案 0 :(得分:-1)
当前,您正在将定义JavaScript函数的“标准”方式与“较新的”箭头功能进行比较。您可以阅读有关here的更多信息。
从网站上
箭头函数表达式在语法上是常规函数表达式的紧凑选择,尽管没有与this,arguments,super或new.target关键字的绑定。箭头函数表达式不适合用作方法,不能用作构造函数。
总结起来,这意味着箭头功能中的this
关键字将打印一个对象(在程序的全局范围内定义),而标准对象将打印空对象(在自己的对象中定义)范围)。
我个人而言,我在项目中越来越多地使用箭头功能,因为有时您不希望该功能创建自己的作用域,而是希望this
指向主要作用域。