JavaScript中闭包的学习笔记

  1. 《深入理解javascript原型和闭包》

    1. 原型
      1. 对象是函数创建的
        1. var ob = new Object(); // 可以看出,其实对象是由函数创建的
        2. 函数(也是对象啦)是Function创建的
          1. var fn = new Function(参数0[, 参数N], 函数体);
      2. 函数是属性的集合(即也是对象)
        1. 每个函数都有个prototype属性,指向原型对象
      3. 对象本来就是属性的集合
        1. 每个对象都有个__proto__属性,指向创建改对象的函数的prototype
        2. 最终,Function.prototype.__proto__指向Object.prototype,然后这个这个原型对象的__ptoto__属性指向null,切记切记
      4. A instanceof B(判断对象A与构造函数B的关系)
        1. 沿着A的__proto__来找原型对象
        2. 沿着构造函数B的prototype来找
        3. 如果两条线能找到同一个对象则返回true
      1. 用hasOwnProperty来判断是从原型链上找到的还是自身的
    2. 执行上下文
      1. 在执行上下文的准备环境完成的工作
        • 变量,函数表达式——变量声明,默认赋值为undefined
        • this——赋值
        • 函数声明——赋值
          • console.log(f1); // function f1(){}在这里就能获取到f1,因为在准备阶段就赋值了function f1(){};
        • 如果代码段是函数体,那么还有arguments和参数——赋值
      1. 函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域
  1. 自由变量
    1. 自由变量是在A作用域中使用,却没在A作用域中声明的变量
    2. 自由变量就是在作用域中找
  1. 闭包
    1. 只需记住两种情况:函数作为返回值,函数作为参数传递

  1. 《学习JavaScript闭包》

    1. 使用闭包的注意点
      1. 闭包使函数中的变量都被保存在内存中,内存消耗大,IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除(设为null还是delete啊?)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值