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;
原文:https://www.cnblogs.com/flyover/p/14071173.html