1、若直接 return; 则 caller 得到 undefined
2、若根本没有 return xxxx; 出现在 function 中,则 caller 得到undefined
3、如果传的 多了,则多出的被ignore;少了,则少的就是undefined
4、访问 function 自带的 arguments 时,要通过index,而不是name来访问
1、nested function 可以有名字,也可以没有名字
2、nested function statement 只能定义在 containing function 的最高层级(即,不能放在 if, while 等 statement 中)
3、nested function literals 可以出现在 containing function中的任何地方
//一个有名字 ( square ) 的 nested function
function hypotenuse(a, b) {
function square(x) { return x*x; }// 这是一个nested function,而且其有名字,为 square
return Math.sqrt(square(a) + square(b));
}
function literal 和 functionstatement的不同之处
1、function literal 是作为一个 expression 的(这是其最重要特征,有没有名字反而不重要)
2、function statement 是作为一个 statement 的
3、function literal 大部分情况下是没有名字,但是,也可以指定名字
举例说明如下:
//一个有名字的 function literal //注意: //1、function literal最重要的特征是“其作为一个expression,而不是一个statement” //2、有没有名字并不是其重要特征 //3、即使存在名字,这个名字也就只能在此 function literal 体内自己调用,其他方法都无法调用它 var f = function fact(x) { if (x <= 1)return 1; else return x*fact (x-1); };
1、定义一个 unnamed function,并且将其存储在 variable f
2、function literal是通过JavaScript expression,而不是通过 statement,来创建的
3、f 中存储的是一个unnamed function,而不是名字为 fact() 的function
4、事实上,没有名字为 fact() 的 function,fact() 只能它在自己体内调用
5、fact 是一个 named function literal,这种 function literal 的特殊之处就在于,function body 可以调用它自己(注意:JavaScript 1.5前,此特性未能正确实现)
6、function literal 的优点:非常灵活,尤其适用于只使用一次从而不需要名字的场合