JavaScript闭包代码调用打印undefined而非预期值1的原因
function outside() { let out = 0; function inside() { out += 1; } return inside; } let ref = outside(); console.log(ref());
原因说明
输出undefined和闭包本身没有关系,问题出在inside函数的定义上:
JavaScript的函数如果没有通过return关键字显式指定返回值,执行完成后默认会返回undefined。
你写的inside函数仅完成了对闭包变量out的自增操作,没有写任何返回逻辑——哪怕闭包确实正常生效、out确实已经从0自增到了1,这个值也只存在于闭包作用域内部,没有被函数返回,所以外层调用ref()时拿到的只能是默认的undefined。
想要拿到预期的自增结果,只需要在inside函数里加上返回值即可:
function outside() { let out = 0; function inside() { out += 1; return out; // 把自增后的out值返回 } return inside; } let ref = outside(); console.log(ref()); // 此时控制台输出1
可以做个简单验证:修改后连续多次调用ref(),会发现输出值依次累加为2、3、4……说明闭包对out变量的持有完全正常,之前的异常纯粹是缺少返回语句导致的。
内容的提问来源于stack exchange,提问作者hels
相关产品推荐
相关产品推荐

