把函数看作一个对象,而函数名看作指针,指向该函数,因此有可能多个函数名指向同一个函数
如下
function sum(num1, num2){
return num1 + num2;
}
alert(sum(10,10)); //20
var anotherSum = sum; alert(anotherSum(10,10)); //20
sum = null; alert(anotherSum(10,10)); //20
这也解释了为什么javascript函数不能重载
通过function haha()来声明的函数,会在进入运行上下文的时候调用function declaration hoisting,在所有代码执行之前编译,因此即使把声明放在最后面也不会出现unexpected identifier异常,而通过var haha=function来定义的,就必须把声明放在使用之前
arguments.callee指向拥有argument的函数
function1.caller指向调用者,指向当前函数调用者argument.callee.caller
argument.caller返回undefined,区分function1.caller和安全考虑
函数也可以理解为运行在特定上下文的对象,用call和apply能够指定运行上下文
函数的参数通过复制值来运行,而不是指针引用
函数被调用的时候会获得两个特别的变量,this和arguments,函数里面的函数无法直接读取外部函数的this和arguments,除非把外部的缓存起来var that = this;
每个函数都会自动收到两个赠送的参数:this 和 arguments,但是函数内部的函数是无法直接获取到外部函数这两个变量的,需要缓存一下