Nic*_*ner 8 javascript anonymous-function
我正在浏览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;
};
Run Code Online (Sandbox Code Playgroud)
那些匿名函数的目的是什么?他们立即超出范围,对吧?
为何使用:
(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);
Run Code Online (Sandbox Code Playgroud)
代替:
ans.addNode(json);
for(var i=0, ch = json.children; i<ch.length; i++) {
ans.addAdjacence(json, ch[i]);
arguments.callee(ans, ch[i]);
}
Run Code Online (Sandbox Code Playgroud)
这是一些超级精英JS黑客吗?
CMS*_*CMS 12
他们只想在这一小段代码中实现递归:
(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);
Run Code Online (Sandbox Code Playgroud)
该arguments.callee属性引用当前正在执行的函数,如果删除匿名函数,它将引用封闭函数,我不认为他们想再次调用整个函数.