zoukankan      html  css  js  c++  java
  • this原理(一)

    var obj = {
      foo: function () {}
    };
    
    var foo = obj.foo;
    
    // 写法一
    obj.foo()
    
    // 写法二
    foo()

    简单概括,上述代码描述了一个对象,并将其存放在obj变量之中,

    obj中有一个匿名函数,因为在对象之中,而对象中存放的往往是key:value形式的东西,所以foo可以理解为key。

    obj.foo(),看到()就意味着进行了函数调用。

    foo(),调用。

    函数存在运行环境这么一说,而在本例中,可以认为有两种运行环境:obj环境和全局环境。

    var obj={foo:5;}

    看上面这句代码:

    对象变量obj中存放的是地址(这句话是正确的吗?也许几年后不会这么认为,但现在还不甚清楚),obj.foo相当于引擎先拿到地址(obj中存放的本身就是地址),通过该地址找到真正的对象并返回其foo属性。

    真正的对象以字典结构保存数据,什么是字典结构?

    一个属性名对应一个对象(用于描述属性的对象),foo有一个组成部分(value元素)。

    重点来了,key:value 中的value如果是一个函数:

    var obj={foo: function(){} };

    此时函数被保存在哪?被保存在内存当中。

    foo属性的value属性中保存的是函数的地址。

    为什么函数可以在不同的环境中执行?也许是因为函数是被单独保存的?

    理解一句话:js允许在函数内部引用当前环境的其他变量?

    第一次理解:函数内部可以引用某个环境的变量。

    当前环境是什么?如何确定?

    需要有一种机制能够在函数体内部获得当前的运行环境,要有事物起作用。

    this站出来了。

    this可以指明当前的运行环境。

    回头看:

    var foo = obj.foo;

     简而言之:处在什么样的环境下,用什么样的东西,做什么样的事情。

    在皇宫当皇帝,自然吃的是御膳房做的东西,在破茅屋当侠客,吃的就是粗茶淡饭。

  • 相关阅读:
    Spark在MaxCompute的运行方式
    新功能初探 | MySQL 8.0 Multi-Valued Indexes功能简述
    吐血整理 | 1000行MySQL学习笔记,不怕你不会,就怕你不学!
    阿里巴巴架构师:十问业务中台和我的答案
    C# int?
    页面后退清空缓存
    oracle 中 创建序列sequence
    sql 与 oracle 几个简单语法差别
    oracle 中用法dual
    将DataTable进行分页并生成新的DataTable
  • 原文地址:https://www.cnblogs.com/flyover/p/14071173.html
Copyright © 2011-2022 走看看