zoukankan      html  css  js  c++  java
  • 原型链和作用域链的理解

    // 什么是作用域链:
            // 作用域链是针对变量的,比如我们一个函数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

            
  • 相关阅读:
    题解 [BZOJ1295][SCOI2009] 最长距离
    题解 [51nod1274] 最长递增路径
    #leetcode刷题之路21-合并两个有序链表
    #leetcode刷题之路20-有效的括号
    #leetcode刷题之路19-删除链表的倒数第N个节点
    #leetcode刷题之路18-四数之和
    #leetcode刷题之路17-电话号码的字母组合
    #leetcode刷题之路16-最接近的三数之和
    #leetcode刷题之路15-三数之和
    #leetcode刷题之路14-最长公共前缀
  • 原文地址:https://www.cnblogs.com/1825224252qq/p/11775810.html
Copyright © 2011-2022 走看看