kan*_*oko 3 javascript parameter-passing dynamic-function
我正在使用具有以下参数化的函数(无法更改):
my_function(data, callback_function(results, status) {});
Run Code Online (Sandbox Code Playgroud)
我需要将其他信息传递给callback_function,这些信息无法添加到'data'(callback_function使用)或'results'或'status'.具体来说,此信息是my_function调用所在的for循环的计数器.
为此,我在callback_function体内包含对计数器的引用:
for(var i = 0; i < 10; i++) {
var data = 'cannot modify this data';
my_function(data, function (results, status) { alert(i); });
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,i的最终值(在这种情况下为9)被打印10次.预期的行为是针对要打印的循环(0到9)中的每个i值.
动态函数是否有可能访问其范围之外的变量,但是在它们被定义的范围内?
您需要创建一个包含创建匿名函数时的值的闭包.您可以使用包装函数:i
function createClosure(x, func) {
return function(results, status) { func(x, results, status); }
}
/* ... */
for(var i = 0; i < 10; i++) {
var data = 'cannot modify this data';
my_function(data, createClosure(i, function(i, results, status) {
alert(i);
alert(results);
alert(status);
}));
}
Run Code Online (Sandbox Code Playgroud)
或者如果你想做空,你可以在适当的位置创建闭包:
for(var i = 0; i < 10; i++) {
var data = 'cannot modify this data';
my_function(data, (function(i) {
return function (results, status) {
alert(i);
}
})(i));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4427 次 |
| 最近记录: |