Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 “为什么?”;这";是否在箭头函数中引用全局对象?_Javascript_Node.js_Object_This - Fatal编程技术网

Javascript “为什么?”;这";是否在箭头函数中引用全局对象?

Javascript “为什么?”;这";是否在箭头函数中引用全局对象?,javascript,node.js,object,this,Javascript,Node.js,Object,This,我正在学习javascript:我尝试在函数“checkAndChange”中访问“this”,但根据我声明和导出函数的方式,“checkAndChange”不能调用以前的函数(this.isErr),因为有时这指的是“全局” 我尝试了3种方法,1种有效,但我不知道为什么。这是一个例子: exports.isErr = (err) => { return err instanceof Error; } // This way works : exports.checkAndCha

我正在学习javascript:我尝试在函数“checkAndChange”中访问“this”,但根据我声明和导出函数的方式,“checkAndChange”不能调用以前的函数(this.isErr),因为有时这指的是“全局”

我尝试了3种方法,1种有效,但我不知道为什么。这是一个例子:

exports.isErr = (err) => {
    return err instanceof Error;
}
// This way works : 
exports.checkAndChange = (obj) => {
    console.log(this); // Here , "this" contains "isErr".
    if (this.isErr(obj))
        return "Error";
    else
        return "It's Okay"
}

不要将
范围与模块范围混淆
与模块无关
在节点模块内部,它不指全局对象,而是指导出本身。您可以在顶部添加
console.log(this==exports)
来验证这一点。由于箭头函数从词汇上解析
,因此箭头函数中的
指的是模块的
。第二个示例是否有效实际上取决于函数的调用方式。不要将此范围与模块范围混淆
与模块无关
在节点模块内部,它不指全局对象,而是指导出本身。您可以在顶部添加
console.log(this==exports)
来验证这一点。由于箭头函数从词汇上解析
,因此箭头函数中的
指的是模块的
。第二个示例是否有效实际上取决于函数的调用方式。
function checkAndChange(obj){
    console.log(this); // But not here , "this" refers to "global".
    if (this.isErr(obj)) // TypeError: this.isErr is not a function
        return "Error";
    else
        return "It's Okay"
exports.checkAndChange = checkAndChange; // here i have to bind(this) to make it work and i don't know why.
}