-5

我在面试中有这个问题

使用 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]()
}
4

2 回答 2

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);
}

或者,告诉我们真正的问题是什么,以便我们更直接地帮助解决这个问题。

于 2013-06-13T23:20:34.963 回答
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
于 2013-06-13T23:34:27.083 回答