今天我开始琢磨 JavaScript,发现了一个有趣的问题:它似乎坚信某个东西是函数,同时又坚信它不是函数。以下代码阐述了这个问题:
var arr1 = Array(1)
for (i = 0; i < arr1.length; i++) {
arr1[i] = function(n) { return n + i }
}
var arr2 = Array(1)
for (j = 0; j < arr2.length; j++) {
arr2[j] = function(n) { return arr1[j](n) }
}
typeof arr2[0] // "function"
arr2[0](2) // TypeError: Property '1' of object [object Array] is not a function
从这里开始,您可以将变量分配给
arr2 [0]
,但错误仍然存在。我不确定闭包或数组是否必要来复制此内容。我的代码有问题吗,还是这只是JavaScript中的一种奇怪现象?这不是我特别需要答案的东西,但它有点愚蠢,所以我想知道是否有原因。
Array(1)
和循环,而不是var arr1 = [function(n) { return n + 1;}];
? - Matt Ball