从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量
Deleting an element from an array and then keeping its state for future use without using global variables
假设我有一个定义如下的数组:
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
}
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 如何使全局变量仅特定于该文件
- 在page.open()-PhantomJS中无法访问全局变量
- 使用全局变量来存储数字(JavaScript)
- 如何将变量声明为全局变量
- 在节点中创建文件全局变量
- 在Javascript中使用全局变量作为缓存是很好的
- 创建要在其他函数中使用的全局变量
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 函数中的innerHTML(全局变量?)
- 如何在javascript中为全局变量赋值
- 全局变量只能由第一个函数访问
- 从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量