- 函数是对象,函数名是指针!!!调用函数的时候,如果只是传递一个参数到函数中去,只用写函数名即可,不必加括号,加了括号的意味着执行函数注意点
- 注意,使用不带圆括号的函数名是访问函 数指针,而非调用函数。
function sum (num1, num2) {
return num1 + num2;
}
这与下面使用函数表达式定义函数的方式几乎相差无几。
var sum = function(num1, num2){
return num1 + num2;
};
- function 关键字后面没有函数名。这是因为在使用函数表达式定义函数时,没有必要使用函数名——通过变量 sum 即可以引 用函数。另外,还要注意函数末尾有一个分号,就像声明其他变量时一样。
- 最后一种定义函数的方式是使用Function 构造函数。Function 构造函数可以接收任意数量的参数, 但最后一个参数始终都被看成是函数体,而前面的参数则枚举出了新函数的参数。来看下面的例子: var sum = new Function("num1", "num2", "return num1 + num2"); // 不推荐
- 函数没有重载
- 除了什么时候可以通过变量访问函数这一点区别之外,函数声明与函数表达式的语法其实是等价的。
- 关于函数调用函数,而非调用函数结果的运用(递归思想)
使用argument.callee
尽管不推荐使用argument.callee了,但可以给内层函数重命名的方法消除紧密耦合
ECMAScript 5也规范化了另一个函数对象的属性:caller。除了 Opera的早期版本不支持,其他
浏览器都支持这个 ECMAScript 3 并没有定义的属性。这个属性中保存着调用当前函数的函数的引用, 如果是在全局作用域中调用当前函数,它的值为 null。例如:
function outer(){
inner();
}
function inner(){
alert(inner.caller);
}
//outer();
为了实现更松散的耦合,也可以通过 arguments.callee.caller 来访问相同的信息。
function outer(){
inner();
}
function inner(){
alert(arguments.callee.caller);
}
//outer();
网友评论