如何访问函数内部的嵌套对象并对其进行遍历?
解决函数内部嵌套对象的访问与遍历问题
这个问题的核心是变量作用域的问题——你定义的y是函数x内部的局部变量,外部根本访问不到它,而且你现在尝试遍历的是函数x本身(函数在JS里也是对象),不是你要的那个湖泊深度对象,这当然行不通啦。
先拆解下你的代码问题:
let y = {...}是x函数的局部变量,作用域仅限x内部,外部无法直接引用。Object.entries(x)遍历的是函数x的内置属性(比如name、length这些),完全不是你目标的湖泊数据。
下面给你几种可行的解决方案,按需选择:
方案一:让函数返回内部对象,外部调用获取后遍历
这是最常用、最符合封装原则的方式,通过函数返回值把内部对象暴露给外部:
function x() { let y = { "Caspian Sea": 560, "Tarn Hows": 53, "Crater Lake": 324, "Lake Tanganyika": 803, "Lake Vostok": 546, "Lake Baikal": 897, }; return y; // 返回内部的湖泊对象 } // 调用函数拿到对象,再遍历键值对 Object.entries(x()).forEach(([lakeName, depth]) => { console.log(`${lakeName} 的深度是 ${depth} 米`); });
方案二:将对象挂载为函数的属性,外部直接访问
如果需要长期复用这个对象,可以把它绑定到函数自身的属性上(注意要先调用函数初始化属性):
function x() { // 把对象赋值给函数x的y属性 x.y = { "Caspian Sea": 560, "Tarn Hows": 53, "Crater Lake": 324, "Lake Tanganyika": 803, "Lake Vostok": 546, "Lake Baikal": 897, }; } x(); // 必须先调用函数,让属性被赋值 // 现在可以直接访问x.y来遍历 for (let [lakeName, depth] of Object.entries(x.y)) { console.log(`${lakeName}: ${depth}`); }
方案三:直接在函数内部完成遍历
如果不需要外部访问这个对象,只是想执行遍历逻辑,直接把遍历代码放在函数内部即可:
function x() { let y = { "Caspian Sea": 560, "Tarn Hows": 53, "Crater Lake": 324, "Lake Tanganyika": 803, "Lake Vostok": 546, "Lake Baikal": 897, }; // 直接在函数内部遍历对象 Object.entries(y).forEach((entry) => { console.log(entry); // 输出每个[湖泊名, 深度]数组 }); } x(); // 调用函数就会触发遍历
内容的提问来源于stack exchange,提问作者steakman
相关产品推荐
相关产品推荐

