zoukankan      html  css  js  c++  java
  • js中的作用域,this指向,原型链

    作用域

    定义:在作用域中找到一个变量,优先在当前的作用域中查找,如果自己的作用域没有的话,会到上级[就看当前作用域在哪里定义的,跟在哪执行的没有关系]查找,如果上级还没有,会一直找到全局,全局也没有会直接报错[xxx is not defined]

    全局作用域

    浏览器一打开就形成一个全局作用域[会自动生成一个全局对象window],在全局作用域下声明的变量属于全局变量

    let a = 1
    console.log(a) // 1
    function fn(){
        console.log(a) // 1
    }
    fn()
    

    上面代码,在全局声明一个bianl变量a,这个变量属于全局变量,可以在当前全局作用域下的任何地方调用它

    私有作用域

    函数执行的时候会形成一个私有作用域,私有作用域中声明的变量属于私有变量,同时形参也属于私有变量

    function fn(){
        let a = 1 
        console.log(a) // 1
    }
    fn()
    console.log(a) //  a is not defined
    

    上面代码中,我们在函数fn中声明一个变量,这个变量属于fn私有作用域的私有变量,只能在函数fn中只用,在外面使用会报错

    this指向

    this是什么?

    this是执行主体

    我了解的this指向,一共有7种情况

    1. 全局作用域下的this都是window
    2. 自执行函数里的this都是window
    3. 函数当做参数的时候,一般情况下都是window
    4. 函数执行,看函数前面是否有‘.’,如果有,那么点前面是谁就是谁,如果没有,this就是window
    5. 元素事件函数中的this,一般情况下都是元素本身
    6. 构造函数当中的this都是实例本身
    7. 通过call、apply、bind,可以改变this

    原型链

    想要学习原型链先记住三句话

    1. 所有的类天生自带一个属性prototype[原型],它是一个对象,【既然是一个对象,浏览器会默认开辟一个堆内存】
    2. 在prototype【堆内存】当中,天生自带一个属性constructor【构造函数】,他指向当前类本身
    3. 所有的对象天生自带一个属性__proto__【原型链】,他指向当前所属类的原型

    原型链的查找机制

    原型链__proto__在实例上找一个属性,优先到自己的私有属性上找,如果没有的话通过__proto__找到自己所属类的原型上去查找,如果自己所属类的原型上还没有,再通过__proto__向上一级查找,知道找到Object基类的原型上,,如果还没有直接返回undefined,这种查找机制,我们叫原型链

  • 相关阅读:
    P3162 [CQOI2012]组装
    P3161 [CQOI2012]模拟工厂
    P3158 [CQOI2011]放棋子
    P3154 [CQOI2009]循环赛
    zabbix部署监控端(server)以及页面优化
    zabbix-agent端自定义监控项(free -m)服务器内存使用率
    java应用系统运行速度慢的解决方法
    at org.apache.hadoop.hbase.tmpl.master.BackupMasterStatusTmplImpl.renderNoFlush(BackupMasterStatusTm
    解决Hbase启动后,hmaster会在几秒钟后自动关闭(停掉)!!!
    全网最详细的Hadoop HA集群启动后,两个namenode都是standby的解决办法(图文详解)
  • 原文地址:https://www.cnblogs.com/mengxiangji/p/10575170.html
Copyright © 2011-2022 走看看