Javascript MDC';什么事?

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*/

现代浏览器中的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*/) {
    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:是的,在这种情况下,使用似乎没有动机。它可以用来表示参数是可选的,但是这里没有代码来处理这个问题;如果不提供参数,则该值将是未定义的。也许这是预期的行为,但代码中没有任何内容表明这一点。