zoukankan      html  css  js  c++  java
  • 对JavaScript的深入理解

    1. 一切(引用类型)都是对象,对象是属性的集合。
    2. 判断一个变量是否是对象。值类型(undefined,number,string,boolean)的类型判断用typeof,引用类型(函数,数组,对象,null,new Number)的类型判断用instanceof。其中typeof判断引用类型只有两个结果(object/function).
    3. 对象都是函数创建的,而函数是Function创建的,Function也是函数,函数也是一种对象。
    4. 每个函数function都有一个prototype,每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。__proto__指向的就是Object.prototype.但是Object.prototype却是一个特例,他的__proto__指向的是null。Object.__proto__===Function.prototype.
    5. instanceof表示的就是一种继承关系,或者原型链的结构。
    6. __proto__是任何对象都有的属性,而js是万物皆对象,所以会形成一条__proto__连起来的链条,递归访问__proto__必须最终到头,并且值为null。
    7. 访问一个对象的属性时,先在基础基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。
    8. 原型可以随时改动。
    9. JavaScript在执行一个代码片段之前,都会进行这些“准备工作”来生成执行上下文。

    10. function fn(x){
          console.log(x+5);
      }
      ===
      var fn=new Function("x","console.log(x+5)");
    11. 11.函数每被调用一次,都会产生一个新的执行上下文环境。函数在定义的时候(不是调用)就已经确定了函数体内部自由变量的作用域。
    12. 12.代码段分三种情况:全局代码、函数体、eval代码(不推荐使用)。
    13. 13.全局代码的上下文环境数据内容为:
      普通变量 声明(默认赋值为undefined)
      函数声明 赋值
      this 赋值
    14.  如果代码段是函数体,那么在此基础上需要附加:
      参数 赋值
      arguments 赋值
      自由变量的取值作用域 赋值
    15. 执行上下文环境:在执行代码之前,把将要用到的所有的变量都事先拿出来,有的直接赋值,有的先用undefined占个空。
    16. 执行上下文是调用函数时产生的,作用域是在函数创建时就产生的。
    17. 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。
      1. 构造函数:构造函数就是用来new的对象。构造函数的首字母大写,例如Object、Array、Function等。如果函数作为构造函数用,那么其中的this代表即将new出来的对象。
      2. 函数作为对象的一个属性:如果函数作为对象的一个属性时,并且作为对象的一个属性被调用时,函数中的this指的是window。
      3. 函数用call或者apply调用:此时this的值取传入的对象的值。
      4. 全局&调用普通函数:在全局环境下,this指向window,调用普通函数,this也是指向window。
    18. 执行上下文栈:处于活动状态的执行上下文环境只有一个。这是一个压栈出栈的过程。
    19. JavaScript没有块级作用域:
      1. JavaScript除了全局作用域之外,只有函数可以创建作用域。
      2. 声明变量时,全局代码要在代码前端声明,函数中要在函数体一开始就声明好。用单var形式声明变量。
      3. 作用域有上下级的关系,上下级关系的确定就看函数是在哪个作用域下创建的。
      4. 作用域最大的用处就是隔离变量,不同作用域下同名变量不会冲突。
    20. 如果要查找一个作用域下某个变量的值,就需要找到这个作用域对应的执行上下文环境,再在其中寻找变量的值。
    21. 要在创建这个函数的那个作用域中取值----是创建而不是调用
    22. 作用域链过程:
      1. 先在当前作用域查找a,如果有则获取并结束,如果没有则继续;
      2. 如果当前作用域是全局作用域,则证明a未定义,结束;否则继续;
      3. 将创建该函数的作用域作为当前作用域;
      4. 跳转到第一步。
    23. 闭包分两种情况:
      1. 函数作为返回值
      2. 函数作为参数被传值。
        var max=10,
        fn=function(x){
            if(x>max){
                console.log(x);
                }
        };
        (function(f){var max=100;f(15);})(fn);
  • 相关阅读:
    Flask特殊装饰器
    flask中的Response、Request、Session、装饰器、实例化参数、蓝图、
    QC的安装和配置
    测试用例设计方法-因果图(鱼骨图)
    测试用例设计方法-流程分析法(场景法)
    测试用例设计方法-状态迁移
    测试用例设计方法-正交实验
    测试用例设计方法-判定表
    测试用例设计方法-边界值
    测试用例设计方法-等价类划分
  • 原文地址:https://www.cnblogs.com/jiaxiaonuo/p/7148090.html
Copyright © 2011-2022 走看看