首页 > 开发 > JS > 正文

如何理解这种js代码?

2017-09-05 13:02:52  来源:网友分享

a是表示什么? 一个函数么?

var a = (function(n){
    if(n<1){ alert("invalid arguments"); return 0; }
    if(n==1){ return 1; }
    else{ return n * arguments.callee(n-1); }
})(4);
document.writeln(a);

解决方案

a在这里并不表示一个函数,如果它要表示定义函数会这么写

var a = function(n){
    if(n<1){ alert("invalid arguments"); return 0; }
    if(n==1){ return 1; }
    else{ return n * arguments.callee(n-1); }
};

显然问题中的写法中a被赋值的是这个函数的执行结果。这是一种匿名函数的执行写法,如果不好理解你可以分解来看。比如上面的代码可以分解成

// 这是匿名函数, 我们给它定义个名字以便理解
var myfunc = function(n){
    if(n<1){ alert("invalid arguments"); return 0; }
    if(n==1){ return 1; }
    else{ return n * arguments.callee(n-1); }
};

// 执行匿名函数并赋值
var a = myfunc(4);

document.writeln(a);