闭包场景下出现'expandedArray is not defined'错误的原因咨询
问题分析与解决
嘿,这个错误的原因其实非常直白——你犯了一个函数名拼写错误!
错误根源
你定义的外部函数是expandArray,但在尝试调用它并赋值给result时,你写的是:
let result = expandedArray();
这里的expandedArray多了一个字母d,JavaScript找不到这个从未定义过的函数,自然就抛出了expandedArray is not defined的错误。
对比你给出的参考示例就能看出来:示例里定义的函数是outerFunction,调用时也是严格使用outerFunction(),名字完全匹配,所以能正常运行。
修正后的代码
只需要把函数调用的名字改成正确的expandArray()就可以解决问题,完整修正后的代码如下:
function expandArray() { let myArray = [1, 1, 1]; return function(addToArray) { myArray.push(addToArray); return myArray; }; } let result = expandArray(); // 这里修正了函数名 result(1); // 返回 [1, 1, 1, 1] result(2); // 再次调用会继续修改原数组,返回 [1, 1, 1, 1, 2]
闭包的验证
修正后,闭包的逻辑就能正常工作了:外部函数expandArray执行后,内部函数会保留对myArray的引用,每次调用返回的内部函数(也就是result),都会直接修改外部作用域的myArray,并且返回更新后的数组,完全符合你想要的需求。
内容的提问来源于stack exchange,提问作者3noki
相关产品推荐
相关产品推荐

