我在这里有一个函数来展平嵌套数组。我看到它使用递归来调用自己来到嵌套数组的底部。但是,每次调用自身后,变量ret
将重置为空数组。
此功能如何能够记住它曾经在ret
中拥有的过去值?这是关闭的一个例子吗?
function steamrollArray(ary) {
var ret = [];
for(var i = 0; i < ary.length; i++) {
if(Array.isArray(ary[i])) {
ret = ret.concat(steamrollArray(ary[i]));
} else {
ret.push(ary[i]);
}
}
return ret;
}
steamrollArray([1, [2], [3, [[4]]]]);
答案 0 :(得分:0)
这是一个递归函数的例子,但它不是闭包。闭包与嵌套函数“关闭”(通过另一个函数的花括号)以及内部函数如何访问父作用域局部变量有关。
例如,这是JavaScript中闭包的示例:
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
// the counter is now 3
注意add();被称为内部函数正在运行,但它仍然可以访问父作用域中的计数器变量。