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;

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

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

posted @ 2020-12-01 22:11  呈心者  阅读(77)  评论(0编辑  收藏  举报