您的位置:首页 > 其它

函数、递归 与 闭包(执行环境、变量对象 与 作用域链)

2013-05-08 20:51 561 查看

函数、递归 与 闭包(执行环境、变量对象 与 作用域链)

函数表达式

1、JavaScript中定义函数有2钟方法:

  1-1.函数声明:

function funcName(arg1,arg2,arg3){
//函数体
}


    ①name属性:可读取函数名。非标准,浏览器支持:FF、Chrome、safari、Opera。
    ②函数声明提升:指执行代码之前会先读取函数声明。即函数调用可置于函数声明之前。

  1-2.函数表达式:

var funcName = function(arg1,arg2,arg3){
//函数体
};


    ①匿名函数(anonymous function,或拉姆达函数):function关键字后无标识符,name属性值为空字符串。在把函数当成值使用时,都可用匿名函数。
    ②类似其他表达式,函数表达式使用前需先赋值,故不存在"函数声明提升"那样的作用。
    ③ECMAScript中的无效函数语法:

if判断中的重复函数声明
      浏览器JavaScript引擎修正错误差异:大多浏览器会返回第二个声明,忽略condition;FF则会在condition为true时返回第一个声明。
      使用函数表达式可解决并实现:

if判断 函数表达式
2、递归
  递归函数,是在一个函数中通过名字调用自身的情况下构成的。

解决方案
    在非严格模式,使用递归函数时,用argument.callee代替函数名更保险
    在严格模式下,使用argument.callee会出错,可用函数表达式 代替 函数声明:

函数表达式代替函数声明
4、闭包

  指有权访问另一个函数作用域中的变量的函数。(常见形式为函数嵌套)

闭包 访问外部函数的this对象
   包围函数的argument对象 也可通过此方法被闭包访问。

5、函数声明 转换为 函数表达式

  JavaScript将function关键字昨晚函数声明的开始,但函数声明后面不能跟圆括号,所以function(){......}();会出错。
  要将函数声明转换为函数表达式,需为函数声明加一对圆括号:

(function(){
//块级作用域
})();


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐