JavaScript: Почему использование анонимная функция здесь?

Я просматривал код JIT, и я видел это:

   var isGraph = ($type(json) == 'array');
    var ans = new Graph(this.graphOptions);
    if(!isGraph) 
        //make tree
        (function (ans, json) {
            ans.addNode(json);
            for(var i=0, ch = json.children; i<ch.length; i++) {
                ans.addAdjacence(json, ch[i]);
                arguments.callee(ans, ch[i]);
            }
        })(ans, json);
    else
        //make graph
        (function (ans, json) {
            var getNode = function(id) {
                for(var w=0; w<json.length; w++) { 
                  if(json[w].id == id) {
                    return json[w];
                  }
                }
                return undefined;
            };

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

Почему использование:

        (function (ans, json) {
            ans.addNode(json);
            for(var i=0, ch = json.children; i<ch.length; i++) {
                ans.addAdjacence(json, ch[i]);
                arguments.callee(ans, ch[i]);
            }
        })(ans, json);

вместо:

            ans.addNode(json);
            for(var i=0, ch = json.children; i<ch.length; i++) {
                ans.addAdjacence(json, ch[i]);
                arguments.callee(ans, ch[i]);
            }

Действительно ли это - некоторый супер элитный взлом JS?

8
задан Kevin Hakanson 2 August 2010 в 01:41
поделиться

1 ответ

Они просто хотят реализовать рекурсию в этом маленьком кусочке кода:

    (function (ans, json) {
        ans.addNode(json);
        for(var i=0, ch = json.children; i<ch.length; i++) {
            ans.addAdjacence(json, ch[i]);
            arguments.callee(ans, ch[i]); // <-- recursion!
        }
    })(ans, json);

свойство arguments.callee ссылается на текущую выполняющуюся функцию, если вы удалите анонимную функцию, она будет ссылаться на вложенную функцию, и я не думаю, что они хотят вызывать всю функцию снова.

12
ответ дан 5 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: