数组到函数数组
array to an array of functions
可能重复:
循环中的Javascript闭包-简单实用的示例
您有一个任意值的数组。在全局作用域中编写一个转换函数,将数组转换为返回原始值的函数数组,因此我们将调用a3,而不是调用a[3]。
例如,我想要:
var a = ["a", 24, { foo: "bar" }];
var b = transform(a);
a[1]; // 24
b[1](); // 24
然而,我得到了:
b
[function () {
return this.temp;
}, function () {
return this.temp;
}, function () {
return this.temp;
}]
这是我的代码:
var a = ["a", 24, { foo: "bar" }];
var b = transform(a);
document.writeln(a[1]); // 24
document.writeln(b[0]()); // 24
document.writeln(b[1]()); // 24
function transform(array) {
b = [];
var i;
for (i = 0; i < array.length; i += 1) {
b[i] = function () {
return temp;
};
}
return b;
}
function transform(array) {
b = [];
var i;
for (i = 0; i < array.length; i += 1) {
b[i] = (function (x) {
return function () { return x; };
})(array[i]);
}
return b;
}
演示http://jsbin.com/udasoj/1/edit
如果您调用b[0]()
,那么您的代码是正确的,那么您应该得到返回的值。
请注意,现有的答案都不起作用;它们都将产生返回CCD_ 2中最后一个值的函数。var
是函数范围的,与闭包的交互很差。
看看我刚刚写的另一个答案,它解释了一个类似的问题:https://stackoverflow.com/a/14330595/17875
什么是temp
?看起来实现这一点的方法是通过另一个函数生成函数:
function transform(array) {
b = [];
var i;
for (i = 0; i < array.length; i += 1) {
b[i] = createReturnFunction(a[i]);
};
}
return b;
}
function createReturnFunction(value){
return function(){ return value; };
}
工作Fiddle:http://jsfiddle.net/eFWyf/
相关文章:
- 数组函数不适用于从元素文本创建的JavaScript数组
- 如何在javascript中求解pack数组函数
- 制作一个javascript的数组函数
- 获取元素的位置并创建它的数组函数
- 茉莉花中的 SpyOn javascript 数组函数
- 自定义数组函数不接受参数
- 使用原型的自定义数组函数.新的 MyArray(1,2,3,4) 不工作
- Java 脚本随机化数组函数
- 在 Restangular 集合上使用 lodash 数组函数
- 比较数组函数返回未定义
- Javascript中嵌套for循环与数组函数的性能
- 多维数组函数在JS中不起作用
- Javascript数组函数有我看不到的错误
- 数组函数外的javascript
- 在数组/函数中循环时使用换行符
- 拼接javascript数组函数获胜't删除项目
- 为什么不'这个js数组函数不能工作
- 如何在我自己的数组原型函数中使用数组函数
- 在javascript中定义数组函数
- Jquery动态树数组函数