- Function
函数实际上就是对象,每一个函数都是Function类型的实例;函数的定义方式有很多种不一一列举了。
其中有一种特殊的定义方式:
var fnSum = new Function("num1","num2","return num1+num2"); //不推荐
一般情况下不推荐使用这种方式。因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次解析传入构造函数中的字符串)。
但是这种语法却可以很清晰的理解“函数是对象,函数名是指针”。
- 函数声明与函数表达式
函数声明与函数表达式是有区别的。具体有什么区别呢?
解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可以访问;至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。查看下面2个例子:
- 错误的
alert(sum(10,10));
var sum = function(num1,num2){
return num1 + num2;
} - 正确的
alert(sum(10,10));
function sum (num1,num2){
return num1 + num2;
}
- 函数内部属性
其余的我就不一一列举。主要说明以下2个属性:
- callee
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文
以下函数返回阶乘function factorial(num) {
if (num <= 1) {
return 1;
}else {
return num * arguments.callee(num-1);
}
}
- caller
返回一个对函数的引用,该函数调用了当前函数。
function outer() {
inner();
}
function inner() {
alert(inner.caller);
}
outer();