我在面试中有这个问题
使用javascript,编写n个元素的数组。数组中的每个元素都是一个调用其自己索引的console.log的函数。例如,第一个元素将是console.log 0,第二个元素将是console.log 1 ....
提前致谢
编辑:很抱歉在研究之前询问。我是编程和新手不知道关闭是什么&无法在搜索中找到一些东西。我自己得到了答案,但这是我遇到的问题。我写了这样的东西
n = 10
var array = []
for (var i=0; i < n; i ++) {
array[i] = function() {
console.log(i);
}
}
for (var j=0; j < n; j ++) {
array[j]()
}
答案 0 :(得分:2)
没有一种简单的方法可以做你要问的事情,因为如果你在每个数组元素中放置一个函数,那么该函数就不知道它的数组索引是什么,除非你以某种方式为每个数组索引绑定一个自定义函数。
但是,所有这些听起来有点像你没有告诉我们真正的问题是什么。如果你在数组中迭代并调用一个函数,那么只需将索引作为第一个参数传递给该函数。
您可以调用数组中的每个函数并将其传递给它的插槽索引,如下所示:
function fn1(index) {
console.log(index);
// do other things here specific to this function
}
// fn2 ... fn4 definitions
var listOfFunctions = [fn1, fn2, fn3, fn4];
for (var i = 0; i < listOfFunctions.length; i++) {
listOfFunctions[i](i);
}
或者,告诉我们真正的问题是什么,以便我们可以更直接地帮助解决这个问题。
答案 1 :(得分:0)
这是一种(多种方式)。
var arr = [];
for (var i = 0; i < 10; i++) {
arr.push(function(){
console.log(this.indexOf(arguments.callee));
});
}
arr[3](); //3
arr[7](); //7
如果您以this
的方式调用您的函数, arr[index]()
将引用该数组。 arguments.callee
指的是函数本身,它本身。因此,该函数在其附加的数组内部搜索并打印出找到的索引。
修改强>
正如jfriend00所指出的那样,arguments.callee
已被弃用,并且在严格模式下不受支持。
所以这是一个“更清洁”的解决方案(来自Bergi的建议):
var arr = [], func;
for (var i = 0; i < 10; i++) {
arr.push(function printIndex(){
console.log(this.indexOf(printIndex));
});
}
arr[3](); //3
arr[7](); //7