从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量

Deleting an element from an array and then keeping its state for future use without using global variables

本文关键字:将来 全局变量 删除 数组 元素 然后 保留 状态      更新时间:2024-03-18

假设我有一个定义如下的数组:

var str = ['H', 'e', 'l', 'l', 'o'];

我有一个按钮,当用户点击它时,它应该删除字符串的第一个元素,并在删除后返回结果数组(即['e', 'l', 'l', 'o'])。还应保存生成的数组,以便下次按下按钮时,删除数组中的下一个元素(即生成的数组将为['l', 'l', 'o']),依此类推,直到删除所有元素。

如果阵列是全局的,这非常简单:

var str = ['H', 'e', 'l', 'l', 'o'];
function remove_first(the_array) {
    the_array.shift();
    return the_array;
}
del.onclick = function() {
    result = remove_first(str);
}

但我想在不使数组全局化的情况下完成此操作。你会怎么做?

您必须在事件处理程序之外定义数组,因为它必须在调用事件处理程序之间保持不变。

但您不必在全局范围内定义数组或函数就可以实现这一点,任何共享范围都可以。因此,您可以使用IIFE创建一个新的作用域:

(function() {
    var str = ['H', 'e', 'l', 'l', 'o'];
    function remove_first(the_array) {
        the_array.shift();
        return the_array;
    }
    del.onclick = function() {
        var result = remove_first(str); // don't forget `var` here
    }
}());

您不需要使数组成为全局变量。

只需使用Javascript闭包功能,您就可以做同样的事情。

var functionForClosure = function () {
    var str = ['H', 'e', 'l', 'l', 'o'];
    function remove_first(the_array) {
        the_array.shift();
        return the_array;
    }
    del.onclick = function() {
        result = remove_first(str);
    }
};
functionForClosure();

str变量可以访问您的onclick函数;str不是全局的,而是函数ForClosure函数的局部。

使用javascript闭包怎么样?

var ns = (function () {
    var str = ['H', 'e', 'l', 'l', 'o'],
        removeFirst = function () { 
            str.shift(); 
            return str; 
        };
    return {
        str: str,
        removeFirst: removeFirst
    };
}());
del.onclick = function () {
    result = ns.removeFirst();
    // console.log(ns.str) to see the result of str
}