JavaScript 高级语言程序设计:函数表达式

第七章 函数表达式

  • 定义函数的两种方式
    • 函数声明
      • 函数声明提升:在执行代码前会先读取函数声明
    • 函数表达式
      • 创建一个函数并赋值给变量,创建的叫匿名函数(拉姆达函数)
递归
  • arguments.callee:指向正在执行的函数的指针,用他代替函数名,防止执行时函数的值已经被修改
闭包
  • 闭包:指有权访问另一个函数作用域中的变量的函数
  • 创建闭包的常见方式是,在一个函数 A 内部创建另一个函数 B,称 A 为包含函数,B 为内部函数
    function A(p1) {
        return function(p2) {   // 匿名函数 B
            return p1 + p2;
        };
    }
    
    • 在 B 从 A 中被返回后,它的作用域链为 A 的活动对象和全局变量对象,这样 B 就可以访问在 A 中定义的所有变量。且 A 在执行完毕后,其活动对象不会被销毁,因为 B 的作用域链仍然在引用这个活动对象
  • 闭包与变量
    • 当返回的是多个函数(如函数数组),他们共同保存着 A 中的活动对象,引用的是同一个地址,即产生了 闭包只能取得包含函数中任何变量的最后一个值 的副作用
  • 闭包内访问 this、arguments 对象时,只能访问自己的活动对象,不能直接访问外部函数的 this、arguments
  • 如果闭包的作用域链中保存着一个 HTML 元素,那么就意味着该元素将无法被销毁,在 IE 的某些版本下会导致存在内存泄漏的问题。因此,在使用完后记得在外部函数中将 element 变量设为 null,以解除对 DOM 对象的引用
模仿块级作用域
  • 多次声明变量时,只有第一次声明有效,但是会执行后续声明中的变量初始化
  • 块级作用域(私有作用域)的匿名函数
(function(){
    //这里是块级作用域
})();
私有变量
  • 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。私有变量包括函数的参数、局部变量和在函数内部定义的其他函数
  • 特权方法:有权访问私有变量和私有函数的公有方法
  • 静态私有变量
    • 构造函数初始化(未声明),会被看做全局变量
    • 特权方法在原型上创建
    • 所有实例共享私有变量和函数
  • 模块模式
    • 用于单例
    • 用一个匿名函数返回对象(对象字面量的形式)
  • 增强的模块模式
    • 使返回的对象必须是某对象的实例
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值