原型链和作用域链的理解

// 什么是作用域链:
        // 作用域链是针对变量的,比如我们一个函数1里面嵌套了另一个函数2,那么此时就有了三个作用域:全局作用域--->函数1作用域--->函数2作用域
        // ,那么函数2会先在自己的作用域内查找相关变量,如果没有就会向上级作用域查找,这个查找过程就是作用域链
        // 例子1:
      
 1   var a = 100
 2         function f1(){
 3             a = 10
 4             function f2(){
 5                 a = 1
 6                 console.log(a);   
 7             }
 8             f2()
 9         }
10         f1()
        // 例子1 最后打印出来的结果是 1 ,因为f2函数在自己的作用域内已经找到了变量a,所以不会继续向上查找

        // 那什么又是原型链呢?
        // 原型链是针对构造函数而言,当我们创建了一个函数obj,通过一个变量new出来一个新的函数f3,那么这个新函数就继承了obj函数的一些属性
        // 当我们在新函数中用到一个没有定义的变量时,它会向原函数obj中去查找这个变量
        // 例子2:
       
 1  function obj(){
 2             this.name = '陈斌',
 3             this.age = 25
 4             obj.prototype.sex = '男'
 5         }
 6         let f3 = new obj()
 7         f3.salary = 6000
 8         console.log(f3.name); 
 9         console.log(f3.sex);
10         console.log(f3.salary);
11         console.log(f3.c);
12         
        // 例子2 输出结果分别是:陈斌  男  6000  undefined
        // name,age,sex 都是obj函数的属性,salary是给新函数f3添加的属性,但是当我们在f3中用到了没有定义的变量,它会自动向它的父级函数查找
        // 当父级函数也没有这个变量,就会返回一个undefined

        

猜你喜欢

转载自www.cnblogs.com/1825224252qq/p/11775810.html