函数表达式

246 阅读1分钟

定义函数的方式?

  1. 函数声明:
    关于函数声明,重要特征就是函数声明提升,意思是在执行代码之前会先读取函数声明。 这就意味着可以把函数声明放在调用它的语句后面;
  2. 函数表达式:
    var functionName = function(arg0, arg1, arg2){ // 函数体 };
    这种形式看起来好像是常规的变量赋值语句,即创建一个函数并将它赋值给变量functionName。
    这种情况下创建的函数叫做匿名函数( anonymous function ),因为function关键字后面没有标识符。
    匿名函数与其他表达式一样,在使用前必须先赋值。

注:不要将函数声明写在 if...else 判断中,函数表达式可以!

递归

在一个函数通过名字调用自身的情况下构成。
注:通过使用 arguments.callee 代替函数名,可以确保无论怎样调用函数都不会出问题。

闭包

是指有权访问另一个函数作用域中的变量的函数。
创建闭包的常见方式,就是在一个函数内部创建另一个函数。
在某个函数被调用时,会创建一个执行环境及相应的作用域链。
然后,使用arguments和其他命名参数的值来初始化函数的活动对象。
但在作用域中,外部函数的活动对象始终处于第二位,外部函数的外部函数的活动对象处于第三位,...直至作为作用域链终点的全局执行环境。
在函数执行过程中,为读取和写入变量的值,就需要在作用域链中查找变量。