请问这段 Nodejs js 代码为什么会输出 undefined?
请问这段 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
?
箭头函数的 this 绑定和普通函数的不一样。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
()=>{} 貌似使用 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
如果您提供的代码与上述情况不符,请确保检查以下几点:
- 函数是否正确返回了值。
- 变量赋值是否正确,没有发生覆盖或未定义的情况。
- 异步代码中是否正确处理了回调或 Promise,确保在结果返回后再进行输出。
如果您能提供具体的代码片段,我可以给出更精确的诊断和解决方案。希望这些信息对您有所帮助!