zoukankan      html  css  js  c++  java
  • 绕不开的this

    犹豫两秒要不要整理this,从红皮书上看了半天,没搞懂哎(弱爆了)


    什么是this?
    this是在执行上下文创建时期创建的一个执行过程中不可改变的变量。
    执行上下文是指js引擎会将代码执行前需要的变量this提前声明好保存在变量对象中的过程,作用域链也保存在这样类似数组的形式存储在函数中的scope属性中。
    this之所以有多变性是因为this只在创建阶段调用,执行上下文创建阶段复制。

    this在不同情况下的指向不同

    1、严格模式下
    this的指向是undefine
    2、非严格模式下,this指向的是window,当obj在全局声明的时候,内部的this指向全局对象,当obj在一个函数中声明的时候(也就是作为纯函数),严格模式下this会指向undefine,非严格模式会自动转为全局对象。
    3、作为对象的用法this等于那个对象,指向调用对象

    var a = 1;
    var obj = { 
        a: 2,
        b: function() { 
        return this.a;
        } 
    } 
    console.log(obj.b())//2

    分析:定义了一个全局变量,然后定义了一个对象,会返回一个字符串,调用的是obj的b方法,所以返回的是2

    var a = 1;
    var obj = { 
      a: 2, b: function() { return this.a; } } var t = obj.b; console.log(t());//1

    分析:调用obj.b()时会立即返回一个字符串,只能找到 var = 1

    4、call、apply、bind会将this绑定给对象,可以改变this的指向

    5、构造函数
    函数和new关键词一起使用时,我们称函数为构造函数,首字母大写(化成灰老子也认识你),this指向新创建出来的对象。
    6、箭头函数
    不能用call和apply,会捕获其上下文的this值,在创建的时候就已经绑定

    7、定时器中的this指向的是window

     

     

    总结

    关于this万变不离其宗,this永远指向正在执行的函数或者对象

                   

  • 相关阅读:
    图像分割之Dense Prediction with Attentive Feature Aggregation
    与中文对齐的英文等宽字体
    管家订菜与Scrum流程
    说说自己在2014年的阅读思路
    Hello World
    Bootstrap实现轮播
    普通Apache的安装与卸载
    Python中OS模块
    Python中文件读写
    Python装饰器
  • 原文地址:https://www.cnblogs.com/jinzhou/p/9075814.html
Copyright © 2011-2022 走看看