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,这种查找机制,我们叫原型链

  • 相关阅读:
    实例说明Java中的null(转)
    Java中初始变量默认值
    Java中finally关键字的使用(转)
    java作用域
    import static和import的区别
    static class
    [APUE]标准IO库(下)
    [APUE]标准IO库(上)
    [APUE]文件和目录(下)
    [APUE]文件和目录(中)
  • 原文地址:https://www.cnblogs.com/mengxiangji/p/10575170.html
Copyright © 2011-2022 走看看