zoukankan      html  css  js  c++  java
  • 【《你不知道的JS(上卷②)》】一、关于this

    一、关于this:

    一)、为什么要用this?

    function identity() {
    	return this.name.toUpperCase();
    }
    
    var me = {
    	name: "Kyle"
    };
    
    var you = {
    	name: "Reader"
    };
    
    identity.call(me); // Kyle
    identity.call(you); // Reader
    

    ​ 观察上面的代码,使用了this,identity函数就不再需要为每一个对象编写不同版本的函数。

    回想之前学习的词法作用域,如果我们想要使用词法作用域来完成类似的功能,应该这样写:

    // 显式传入一个上下文对象
    function identity(context) {
    	return context.name.toUpperCase();
    }
    // ...
    identity(me); // Kyle
    identity(you); // Reader
    

    显然,使用this的写法更加优雅。它的作用就是隐式“传递”一个对象引用。

    二)、关于this的说明:

    1、this并不指向函数自身:

    JS中函数是一个对象,因此是可以在调用函数时存储状态的,但是this并不会指向函数本身。

    2、this的作用域:

    ​ this在任何情况下都不指向函数的词法作用域。在JS内部,作用域确实和对象类似,可见的标识符都是它的属性。但是作用域“对象”无法通过JS代码访问,它存在于JS引擎内部。

    • this无法与词法作用域共存!

    三)、this到底是什么:

    ​ this是 动态作用域的表亲,this的绑定与函数声明的位置无关,而是取决于函数的调用方式。

    ​ 当一个函数被调用时,会创建一个活动记录(执行上下文)。这个记录会包含函数在哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this就是记录的其中一个属性,会在函数执行的过程中用到。

  • 相关阅读:
    Medium | LeetCode 347. 前 K 个高频元素 | 快速排序
    Medium | LeetCode 215. 数组中的第K个最大元素 | 快速排序
    Easy | LeetCode 75. 颜色分类 | 快速排序
    lib和dll
    windows使用cmd打印出当前路径下的所有文件名称
    windows中的sleep和Ubuntu中的sleep
    ‘mutex’ in namespace ‘std’ does not name a type
    gcc命令参数
    ubuntu18.04 使用pthread库
    vs2019 c语言配置pthreads多线程
  • 原文地址:https://www.cnblogs.com/enmac/p/13122359.html
Copyright © 2011-2022 走看看