如何将参数传递到内部函数中
How to pass parameter into internal function
我没能把I作为参数从onready()传递到setInterval()中,所以同时我解析了循环:
function myFunc() {
myWidgets[0].onready = function(){
setInterval( function(){
var pVal = $('#Pv1').text();
myWidgets[0].setValue(pVal);
}, 1000);
};
myWidgets[1].onready = function(){
setInterval( function(){
var pVal = $('#Pv2').text();
myWidgets[1].setValue(pVal);
}, 1000);
};
myWidgets[2].onready = function(){
setInterval( function(){
var pVal = $('#Pv3').text();
myWidgets[2].setValue(pVal);
}, 1000);
};
如何添加I作为参数?
以下操作不起作用,i在setInterval的内部函数中未定义:
myWidgets[i].onready = function(i){
setInterval( function(i){
var j = i + 1;
var pVal = $('#Pv' + j).text();
myWidgets[i].setValue(pVal);
}, 1000);
};
您可以使用enclosure通过onready
:访问i
的当前值
for (var i=0;i<3;i++) {
(function(x){
myWidgets[x].onready = function(){
setInterval(function(){
var pVal = $('#Pv' + (x+1) ).text();
myWidgets[x].setValue(pVal);
}, 1000);
}
})(i);
}
如果没有机柜,它无法使用i
的当前值的原因是它不会在循环的当前步骤使用该值。相反,当onready
出现时,它将使用i
的值,该值在循环结束时已经达到最大值。
您可以简单地使用一个函数外壳。
for (var i=0; i<3; i++) {
(function(i) {
myWidgets[i].onready = function() {
setInterval(function(){
var pVal = $('#Pv'+(i+1)).text();
myWidgets[i].setValue(pVal);
}, 1000);
};
})(i);
}
Try this. The case you are referring to is closure
myWidgets = [];
for(var i = 0; i < 3; i++) {
myWidgets[i].onready = (function(i){
return function(){setInterval( function(){
var pVal = $('#Pv' + (i+1) ).text();
myWidgets[i].setValue(pVal);
console.log(i)
}, 1000);}
})(i);
}
你能做什么,但我不知道这是否是你问题的答案。
for(var i = 0; i < 3; i++) {
myWidgets[i].onready = function(){
setInterval( function(){
var pVal = $('#Pv' + (i+1) ).text();
myWidgets[i].setValue(pVal);
}, 1000);
};
}
它与作用域和回调有关。您的解决方案不起作用,因为onReady的回调函数不知道上下文,例如不知道i
。
使用jQuery可以使这一点变得更好。(每个小部件都有一个类myWidget)
$('.myWidget').ready(function () {
var element = $(this); // is the widget of your code.
setTimeout(function () { element.val(element.val()*1 + 1); });
});
您需要阅读尝试使用的API的文档。
https://developer.mozilla.org/en-US/docs/Web/API/Window.setInterval会告诉你:
语法
var intervalID=window.setInterval(函数,延迟[,param1,param2,…]);var intervalID=window.setInterval(代码,延迟);
借用@Haneev的答案代码,可以写成如下。
我使用j
作为形式参数,以表明它不是从外部范围使用i
。
对于(var i=0;i<3;i++){myWidgets[i].onpready=函数(){setInterval(函数(j){var pVal=$('#Pv'+(j+1)).text();myWidgets[j].setValue(pVal);},1000,i);};}
相关文章:
- 在构造控制器、服务等时作为函数参数传递之前列出的角度 JS 变量
- 作为函数参数传递的匿名函数的范围
- 通过函数参数传递id
- 将数组值作为函数参数传递
- 是否需要初始化在 Javascript 中作为“类”构造函数参数传递的变量
- JavaScript 函数参数传递数组
- Angular2 将函数参数传递给构造函数
- 为什么我不能将角度变量作为函数参数传递
- jQuery - 基于作为函数参数传递的对象构建动态 if 语句
- 停止对作为函数参数传递到新列表的对象引用
- 在 JavaScript 中将数组作为内置函数参数传递
- AngularJS将范围变量名称作为函数参数传递
- Javascript 将对象作为函数参数传递
- 在对象上调用方法或将对象作为函数参数传递的差异
- 正确的方法:始终将所有变量作为函数参数传递
- 如何将动态创建的复选框值作为函数参数传递
- 节点简斯 |将对象作为函数参数传递
- 什么是将对象属性作为函数参数传递的良好策略/模式
- 将对象作为函数参数传递.不确定如何访问这些值
- 为什么我们要将函数参数传递到$scope$申请