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给调用了

  • 相关阅读:
    sqlplus时报Linux-x86_64 Error: 13: Permission denied
    thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 合并石子
  • 原文地址:https://www.cnblogs.com/yanghuiting/p/9885780.html
Copyright © 2011-2022 走看看