我知道每个人的表现都不是很好,但我正在尝试使用它(只是一个学习练习)来循环一些事情(n)次。
我正在尝试这个,但我无法让它发挥作用:
var i = 0;
new Array(10).prototype.foreach.call( function(){ i++; } );
可以这样使用吗?我的代码出了什么问题?谢谢!
答案 0 :(得分:3)
在内部,您可以将SELECT psd.type, count(*) as total
FROM question_answer_nps qan
JOIN question_answer qa ON
qan.question_answer_id = qa.id
JOIN post_sale_action psa ON
psa.id = qa.post_sale_action_id
JOIN post_sale_dispatch psd ON
psd.id = psa.post_sale_dispatch_id
JOIN post_sale_lot psl ON
psl.id = psd.post_sale_lot_id
WHERE qan.nps_answer is not null
AND psd.status != 0
AND psa.status in (2, 3)
AND psl.status != 0
GROUP BY psd.type
视为定义如下:
forEach
请注意,这只是一个基本的例子,它并不是正确的XD但是它对于我正在制作的这个点已经足够了。即,Array.prototype.forEach = function(cb) {
for( var i=0, l=this.length; i<l; i++) {
cb(this[i]);
}
}
。
通常,this
是您正在处理的数组。但是通过this
来电,.call()
。函数this === function(){ i++; }
是它接受的参数数量,在您的情况下为零,因此代码永远不会运行。即使它确实(例如length
),函数中的代码也不会运行,因为它必须是function(x){ i++; }
的第二个参数(这将成为第一个参数) .call()
)
试试这个:
[].forEach.call(new Array(10), function() {i++;});
这将获取 .forEach()
方法,在上调用一个长度为10的数组,将该函数作为回调参数传递。
我在上面错了。 forEach
无法按您希望的方式运行。你需要一些像new Array(10)
这样的hackery来获得Array.apply(null, Array(10)).map(function () {})
可以使用的数组。你最好只使用forEach
。