gpt4 book ai didi

Javascript:为什么在这里使用匿名函数?

转载 作者:数据小太阳 更新时间:2023-10-29 04:08:34 26 4
gpt4 key购买 nike

我正在浏览 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]);
}

这是一些 super 精英 JS hack 吗?

最佳答案

他们只是想在那一小段代码中实现递归:

    (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 property 指的是当前正在执行的函数,如果你删除匿名函数,它将指的是封闭函数,我认为他们不想再次调用整个函数。

关于Javascript:为什么在这里使用匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com