zoukankan      html  css  js  c++  java
  • 作用域链、this细说

    一、作用域链

    作用域:浏览器给js的一个生存环境(栈内存)

    作用域链:js中的关键字var和function 都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中。然后js从上到下逐行执行,遇到变量就去内存地址查找是否存在这个变量。有就使用,没有就继续向父级作用域查找直到window下结束,这种查找机制叫作用域链。

    为什么要使用作用域链?

    Js代码中存在着大量的变量和函数,我们在使用它们的时候一定要知道它们到底归属谁。

    二、this 细说

     1、this是js的一个关键字,指定一个对像然后去替代他。

       分为函数内的this和函数外的this,函数内的this指向行为发生的主体。函数外的this都指向window没有意思。

       eg:(1)、function  chi(){

              console . log (this)

                }

            ban . chi ( )     ban就是这个函数的主体

         (2)、 function  chi(){

              console . log (this)

                }

            chi ( )    结果的window

       为什么是window?

          因为浏览器执行js代码的时候在执行chifan()这个函数的时候查找到变量chifan的归属是window,在window下的变量可以写成    window.chifan,函数可以写成window.chifan()。

     2、函数内的this和函数在什么环境下定义没有关系,而只和自己的主体有关。

     3、主体这么找?

        就看这个函数(方法)带不带”.”,如果函数和方法执行带“.”,那么this就指向”.”前面的对象,如果不带“.”就指向window。

     4、自执行函数里面的this都指向window。

        eg:var num=42;

            var obj={
            num:12,
            ff:(function(){
            console.log(this.num)        this是指window
            }())
            }

     5、给元素中的某一个事件绑定方法,当事件触发时,执行绑定的方法,方法中的this指向当前元素。

      6、call()、apply()、bind()

      这三个方法可以改变函数内的this的指向

      A . call(B,c,d)  B取代了A中this,然后把B给调用了

  • 相关阅读:
    零位扩展和符号位扩展
    JAVA虚拟机20基于栈的解释器执行过程示例
    JAVA虚拟机16方法的动态调用
    JAVA虚拟机17栈帧(局部变量表操作数栈动态连接返回地址)
    JAVA虚拟机21JAVA内存模型
    JAVA虚拟机18方法调用
    符号扩展和零位扩展
    JAVA虚拟机22原子性、可见性与有序性、先行发生原则
    MYSQL各版本下载,包括linux和windows
    【转】Android模拟器怎么配置网络连通
  • 原文地址:https://www.cnblogs.com/yanghuiting/p/9885780.html
Copyright © 2011-2022 走看看