Существует много заблуждений относительно arguments.callee, и я пытаюсь понять, существуют ли случаи использования, когда его действительно нельзя заменить жизнеспособной альтернативой строгого режима ES5. .
В документации MDN arguments.callee они указывают на использование аргументов. callee без хорошей альтернативы со следующим примером кода ниже:
function createPerson (sIdentity) {
var oPerson = new Function("alert(arguments.callee.identity);");
oPerson.identity = sIdentity;
return oPerson;
}
var john = createPerson("John Smith");
john();
Они включили ссылку на ошибку, чтобы показать, что в некоторых случаях аргумент. callee нельзя заменить кодом, соответствующим строгому режиму ES5.
Но для понимания код, который они использовали в качестве примера, можно заменить следующей альтернативой строгий режим:
"use strict";
function createPerson(sIdentity) {
var oPerson = function () {
alert(oPerson.identity);
};
oPerson.identity = sIdentity;
return oPerson;
}
var john = createPerson("John Smith");
john();
С учетом сказанного, действительно существуют алгоритмы, в которых нельзя заменить arguments.callee?
ПОДАРОК
Чтобы выиграть награду, я хочу, чтобы ответ содержал использование arguments.callee
, где было бы гораздо более неясно или невозможно использовать другое решение.
В примере с MDN версия, которую я написал в качестве альтернативы, не меняет использование этого фрагмента кода.
arguments.callee
, а не альтернативы. Каждый кусок кода, который я получил, я мог бы использовать в качестве альтернативы, но я вижу много людей, спорящих об устареванииarguments.callee
, и я не вижу для этого причин. Чтобы использоватьarguments.callee
, мы должны пройтись по стеку, и он медленный на всех языках, которые я знаю. - person sergiogarciadev   schedule 26.05.2014