请问这段 Nodejs js 代码为什么会输出 undefined?

发布于 1周前 作者 gougou168 来自 nodejs/Nestjs

请问这段 Nodejs js 代码为什么会输出 undefined?

平时 js 写的不多,以下代码有个地方不太明白。

let func = () => ({
    a: 1,
    b: () => {
        return this.a;
    }
});
let instance = func();
console.log(instance.b()); // undefined

我记得如果this在一个函数里面的话,this会被设定为这个函数的调用者。在上面这段代码里调用b的是instance,所以this应该就是instance。显然instance.a === 1是成立的,那为什么this.a会返回undefined


12 回复

()=>{} 貌似使用 this 会出错

箭头函数没有 this ,用到的是外层的 this 。这里最外层的 this 就是 undefined 。
你可以把箭头函数改成普通函数表达式再试试。

Arrow functions 会有一个 lexical this 的特性,因此函数中的 this 并非指向函数自身,而是外面一层,如 Window

所以你的代码在 ES5 等同:

var self = this;
function func() {
return {
a: 1,
b: function () {
return self.a;
}
};
}

this 是外层的,不是 func 的,箭头函数导致的
你可以看看 babel 转换后的

所以一般写成
b () {
return this.a
}

var func = function func() {
return {
a: 1,
b: function b() {
return undefined.a;
}
};
};
var instance = func();
console.log(instance.b()); // undefined

以上的 babel 转换成 es5 后的代码,可以参考一下

这里的 this 指向的是调用时的全局变量

箭头函数里不能用 this

可以改成这样

let func = () => ({
a: 1,
b() {
return this.a
}
})
console.log(func().b())

您好!为了准确解答您关于 Node.js 代码输出 undefined 的问题,我需要您提供具体的代码片段。不过,我可以先给出一个常见的导致输出 undefined 的场景,并提供相应的解释和修正代码。

假设您的代码类似于以下形式:

function calculateSum(a, b) {
    let sum = a + b;
    // 忘记返回 sum
}

const result = calculateSum(5, 3);
console.log(result);  // 输出 undefined

在上述代码中,calculateSum 函数计算了两个数的和,但忘记使用 return 语句返回结果。因此,当调用 calculateSum(5, 3) 时,函数实际上没有返回任何值,导致 result 变量被赋值为 undefined

修正后的代码如下:

function calculateSum(a, b) {
    let sum = a + b;
    return sum;  // 添加返回语句
}

const result = calculateSum(5, 3);
console.log(result);  // 输出 8

如果您提供的代码与上述情况不符,请确保检查以下几点:

  1. 函数是否正确返回了值。
  2. 变量赋值是否正确,没有发生覆盖或未定义的情况。
  3. 异步代码中是否正确处理了回调或 Promise,确保在结果返回后再进行输出。

如果您能提供具体的代码片段,我可以给出更精确的诊断和解决方案。希望这些信息对您有所帮助!

回到顶部