JavaScript如何访问const函数块内部定义的layerAttributes变量
问题解答
首先明确结论:默认无法直接从函数外部访问函数内部通过const声明的layerAttributes变量,这是JavaScript的函数作用域规则决定的,函数内部声明的变量、常量默认仅在函数内部可访问。
你可以通过以下几种方式拿到这个值:
- 方案1:修改函数返回值(最推荐,符合封装规范)
调整原函数的返回逻辑,将layerAttributes作为返回值传递到外部,修改后的代码示例:
const addAttributes = (_element) => { let selectedElement = _element.layer; const layerAttributes = { trait_type: _element.layer.trait, value: selectedElement.traitValue, ...(_element.layer.display_type !== undefined && { display_type: _element.layer.display_type, }), }; console.log(layerAttributes); if ( attributesList.some( (attr) => attr.trait_type === layerAttributes.trait_type ) ) return null; // 重复时返回空标识 attributesList.push(layerAttributes); return layerAttributes; // 新增成功返回属性对象 }; // 外部调用时直接接收返回值即可 const newAttr = addAttributes(你的入参); if (newAttr) { console.log('获取到的layerAttributes:', newAttr); }
- 方案2:从公共数组
attributesList中读取
你的原有逻辑已经把不重复的layerAttributes推入了外层的attributesList数组,你可以直接在外部通过数组方法查找对应值:
// 已知trait_type的情况下查找对应属性 const targetAttr = attributesList.find(attr => attr.trait_type === '你要查找的trait_type值'); console.log(targetAttr); // 如果是刚执行完addAttributes操作,也可以直接取数组最后一项 const latestAttr = attributesList[attributesList.length - 1];
- 方案3:外层作用域预先声明变量承接(不推荐)
你也可以在函数外层提前声明一个变量,函数内部给该变量赋值,外部直接访问即可。但这种方式会破坏函数封装性,容易引发变量污染,非必要不建议使用。
内容的提问来源于stack exchange,提问作者adscumlabs
相关产品推荐
相关产品推荐

