2010-08-10 1 views
2

JavaScript в современных браузерах включает метод Array.forEach, который позволяет писать так:Что делают символы комментария в MDC forEach?

[1,2,3].foreach(function(num){ alert(num); }); // alerts 1, then 2, then 3 

Для браузеров, которые не имеют Array.forEach на массиве прототипа, MDC обеспечивает an implementation, что делает то же самое:

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); 
    } 
    }; 
} 

Почему эта реализация использует/* и */в определении функции? То есть почему написано function(fun /*, thisp*/) вместо function(fun, thisp)?

ответ

4

Потому что это комментарий.

function(fun /*, thisp*/) такое же, как function(fun). В заголовке функции нет второго аргумента.

В середине функции вы видите переменную thisp и объявили значение второго аргумента. Комментарий в определении функции просто указывает, что вы можете вызвать функцию с двумя аргументами, хотя два аргумента не определены в заголовке функции.

+1

Мой единственный вопрос - почему они делают это так. Просто раскомментирование 'thisp' в заголовке функции будет иметь тот же эффект, что и' var thisp = arguments [1]; 'и это сохранит строку кода. Что мне не хватает? – MooGoo

+1

@MooGoo: Да, использование в этом случае не кажется мотивированным. Его можно использовать, чтобы предположить, что аргумент является необязательным, но здесь нет кода для его обработки; если аргумент не указан, значение будет неопределенным. Возможно, это намеченное поведение, но в коде нет ничего, что подсказывает это. – Guffa

0

Ну, вы берете его слишком осторожно и синтаксически. Это просто комментарий.

Когда они говорят,

function(fun /*, thisp*/) { 
    // body 
} 

они на самом деле указывает на возможность, что вы можете раскомментировать ее, и отправить thisp в качестве аргумента, вместо того, чтобы объявить его в теле функции.

Смежные вопросы