你的位置:首页 > 软件开发 > Java > JavaScript之自我总结篇

JavaScript之自我总结篇

发布时间:2016-03-31 23:34:39
最近在看汤姆大叔的"深入理解JavaScript系列",写得真的不错,对于我而言特别是12章到19章,因为大叔研究的点,就主要是从底层来研究JavaScript为什么会出现钟种特有的语言现象,所以学习了大叔的文章后,自己对JavaScript的认知也更明白了, ...

JavaScript之自我总结篇

最近在看汤姆大叔的"深入理解JavaScript系列",写得真的不错,对于我而言特别是12章到19章,因为大叔研究的点,就主要是从底层来研究JavaScript为什么会出现钟种特有的语言现象,所以学习了大叔的文章后,自己对JavaScript的认知也更明白了,以前好多地方是知其然而不知其所以然,你要问我JavaScript为什么会出现这些现象,我也只能说这是它语言本身的特性嘛。

以下是我初次看了大叔Javascript系列(12到19章)一时不能理解的点,但经过细细品味后才豁然开朗。

所以,自我总结如下:

注:总结中掺杂了个人的观点以及理解层度,所以有什么错误的地方,还请不吝指教。 

一、深入理解JavaScript系列(12)之变量对象: 

在大叔这章中,大叔提到了一个概念就是‘变量对象(varibale object)’

‘变量对象’,是与执行上下文有关的,因为JavaScript在执行表达式时,总得知道相应的变量存储在哪吧?不然怎么获取或改变对应的变量值呢?

所以引入了一个‘变量对象’的概念。

都说了是对象嘛,就是以键值对的方式,存储到变量对象中咯。

1、 在进入执行上下文时,‘变量对象’VO

(1)会将函数的所有形参(如果我们是在函数执行上下文),以形参名和其对应的值作为变量对象的属性,如果形参没有对应的值,就是undefined咯。

(2)会将所有函数声明,以函数名和对应的函数对象作为变量对象的属性。如果,变量对象中已经存在了相同名称的属性,就完全替代。

(3)会将所有变量声明,以变量名和其对应值(undefined)作为变量对象的属性。如果变量名称与上述(1)、(2)中的形参名或函数名撞车了,则变量声明不会去影响        存在的这类属性。

且,在上面提到,变量对象与执行上下文有关,那么它们究竟什么关系呢?

分两种情况:

一种情况就是在进入任何执行上下文之前就创建的对象,此乃全局对象(Global object)global;

另一种就是,我们都知道在JavaScript中作用域是以函数function为基准的,所以函数的变量对象其实就是执行上下文对象;

具体见以下两幅图:

 JavaScript之自我总结篇

                   图一

 JavaScript之自我总结篇

                   图二

注:函数中的变量对象是不能访问的。

那为什么全局中的变量对象能访问呢?

因为可以通过this或者window,因为window是全局变量global的一个属性,且引用了global。这也就是为什么在全局变量中访问标识符时,用this或者直接访问标识符时,会比用window快的原因。

2、 在执行代码时

变量对象VO,已经在进入上下文时,做了预处理。So,接下来就是根据具体的代码改变对应的值了。

二、深入理解JavaScript系列(13)之This:

说到this,简单点嘛就是由调用者决定的,谁调用的就是谁。

如下:

function fn(){  console.log(this);};var foo = {  bar: fn};//输出的this指向foofoo.bar();

原标题:JavaScript之自我总结篇

关键词:JavaScript

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。