以下是关闭的一个例子吗?

时间:2017-02-13 08:17:43

标签: javascript

我在这里有一个函数来展平嵌套数组。我看到它使用递归来调用自己来到嵌套数组的底部。但是,每次调用自身后,变量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]]]]);

1 个答案:

答案 0 :(得分:0)

这是一个递归函数的例子,但它不是闭包。闭包与嵌套函数“关闭”(通过另一个函数的花括号)以及内部函数如何访问父作用域局部变量有关。

例如,这是JavaScript中闭包的示例:

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// the counter is now 3

注意add();被称为内部函数正在运行,但它仍然可以访问父作用域中的计数器变量。