【发布时间】:2013-03-15 18:52:07
【问题描述】:
所以我今天开始乱用 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;}];? -
这最初是在我在循环索引上试验闭包数组时发生的,所以我就保持这样
-
另外,@bfavaretto:这就像我最初测试的那样,结果证明它比我想象的更多(因为每个的基本原理是相同的)。所以我愿意承认这是重复的。
标签: javascript arrays function closures typeerror