Javascript MDC';什么事?
现代浏览器中的JavaScript包括Array.forEach方法,可用于编写以下内容:Javascript MDC';什么事?,javascript,foreach,Javascript,Foreach,现代浏览器中的JavaScript包括Array.forEach方法,可用于编写以下内容: [1,2,3].foreach(function(num){ alert(num); }); // alerts 1, then 2, then 3 对于阵列原型上没有Array.forEach的浏览器,MDC提供了执行相同操作的功能: if (!Array.prototype.forEach) { Array.prototype.forEach = function(fun /*, thisp*/
[1,2,3].foreach(function(num){ alert(num); }); // alerts 1, then 2, then 3
对于阵列原型上没有Array.forEach的浏览器,MDC提供了执行相同操作的功能:
if (!Array.prototype.forEach) {
Array.prototype.forEach = function(fun /*, thisp*/) {
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in this)
fun.call(thisp, this[i], i, this);
}
};
}
if(!Array.prototype.forEach){
Array.prototype.forEach=函数(fun/*,thisp*/){
var len=this.length>>>0;
如果(乐趣的类型!=“功能”)
抛出新的TypeError();
var thisp=参数[1];
对于(变量i=0;i
为什么这个实现在函数定义中使用/*和*/呢?也就是说,为什么它写的是
函数(fun/*,thisp*/)
而不是函数(fun,thisp)
?,因为它是一个注释
函数(fun/*,thisp*/)
与函数(fun)
相同。函数头中没有第二个参数
在函数的中间,您可以看到变量
thisp
被声明,并为第二个参数赋值。函数定义中的注释只是为了指出,您可以使用两个参数调用函数,尽管函数头中没有定义这两个参数。您在语法上过于谨慎。这只是一个评论
当他们说
function(fun /*, thisp*/) {
// body
}
它们实际上是在指示一个选项,您可以取消对它的注释,并将
thisp
作为参数发送,而不是在函数体中声明它。我唯一的问题是它们为什么这样做。只需在函数头中取消注释thisp
,其效果与var thisp=arguments[1]完全相同代码>并且它将保存一行代码。我遗漏了什么?@MooGoo:是的,在这种情况下,使用似乎没有动机。它可以用来表示参数是可选的,但是这里没有代码来处理这个问题;如果不提供参数,则该值将是未定义的。也许这是预期的行为,但代码中没有任何内容表明这一点。