JavaScript中调用read方法后,console.log(calculator.a)返回undefined的原因?
问题分析与解答
首先明确:如果严格按你提供的代码在全局作用域运行(比如直接在浏览器控制台输入),calculator.read()肯定会给calculator对象添加a和b属性,console.log(calculator.a)应该能输出你输入的数值,不会返回undefined。
你遇到的情况,大概率是以下原因:
- 作用域隔离导致控制台访问不到正确变量:你的代码被包裹在局部作用域里(比如自执行函数、普通函数、ES模块),
let calculator声明的是局部变量,不是全局变量。当你在控制台输入console.log(calculator.a)时,访问的是全局作用域的calculator(要么没定义,要么没赋值),所以返回undefined;但代码内部的局部calculator已经被read()正确赋值,因此sum()和mul()能正常计算并弹出结果。 - 后续代码覆盖了
calculator变量:在calculator.read()之后、你执行console.log之前,有代码重新给calculator赋值(比如calculator = {}),原对象被替换成新对象,新对象自然没有a属性。不过这种情况下calculator.sum()应该会报错,所以这个可能性较低。
验证方法很简单:在代码里calculator.read()之后、alert之前加一行console.log(calculator.a),运行代码后就能在控制台看到正确的数值,这说明read()确实成功给对象属性赋值了,问题出在你后续控制台访问的作用域不对。
内容的提问来源于stack exchange,提问作者Musharaf Ali
相关产品推荐
相关产品推荐

