Javascript如何存储预定义的函数(带有参数)
Javascript how to store predefined function (with arguments)
可能的重复项:
Javascript臭名昭著的循环问题?
我有以下几点:
function test(a,b,c){
console.log(a+b+c);
}
for (var i=0; i < array.length; i++){
steps.push(
function(){ test(array[i].something, array[i].wow, i);}
);
我想存储带有多个参数的函数,并在稍后加载 DOM 时将它们绑定到按钮
for (var i=0; i<steps.length; i++){
$('#mydiv li a').eq(i).click(steps[i]);
}
它并没有真正起作用,因为步骤[i]包含do(array[i].something,array[i].wow,i(;而不是do('bob', 'john', 1(
我尝试使用 .apply javascript 函数,但它将在循环中执行,而不是存储它们
闭包可以在这里为您提供帮助。下面是第一段代码的一个解决方案:
function do(a,b,c){
console.log(a+b+c);
}
for (var i=0; i < array.length; i++){
(function (i) {
steps.push(
function(){ do(array[i].something, array[i].wow, i);}
);
})(i);
}
Javascript中没有"块作用域",只有函数作用域。使用您的代码,您推送到 steps
数组中的每个函数都有一个对 i
最后一个值的引用,而不是函数被推入 steps
时所拥有的值。调用立即执行的函数可使推送的函数具有不会更改的i
值,因为正在创建闭包。并且这个闭包有一个 i
值,该值与循环的 i
值无关,这将是 array
的最后一个索引。
使用 function.bind
.
// Create a new function with null for the `this` object, and 1 and 2 for its arguments.
// Unlike `apply`, you shouldn't enclose the arguments in an array.
var fn = someFn.bind(null, 1, 2, 3, 4);
// This is like calling someFn.apply(null, 1, 2, 3, 4);
fn();
请参阅此处的文档。请注意,在"兼容性">标题下,它解释了如何确保此功能适用于所有目标浏览器(甚至是IE的旧版本(。您只需将代码复制并粘贴到那里即可。
function doSomething(a,b,c){
console.log(a+b+c);
}
functionPrepare(func, args, thisarg) {
return function() { func.apply(thisarg, args); };
)
var steps = [];
for (var i=0; i < array.length; i++) {
steps.push(
functionPrepare(doSomething, [array[i].something, array[i].wow, i])
);
}
// later...
for (var i=0; i<steps.length; i++) {
steps[i]();
}
//assuming it's always the same function
for (var i=0; i < array.length; i++){
$("#mydiv li a").eq(i).on('click',function() {
// your function here
});
}
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用闭包共享构造函数参数
- 函数参数的值错误
- 当一个重要的构造函数参数丢失时应该发生什么
- 阻止ReSharper将JavaScript函数参数放到新行中
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 使构造函数参数具有ES6类方法的特权
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- Windows.Networking.EndpointPair构造函数参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 大括号中的Javascript函数参数
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 将JSON字符串转换为函数参数
- eval()读取函数参数有多糟糕
- Javascript不能在一个命令中使用函数参数
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- ES6类构造函数参数
- 是否可以在javascript函数参数列表中调用多个函数