看完波哥JavaScript进阶前几章的总结

2017-08-18  本文已影响0人  LeoMelody

第一次写文章。

无论是生活,情感,还是知识。 都值得我们记录下来不断回味。

以下是我这几天的收获与感想

1、执行上下文。EC(Execute Context)

函数的执行上下文包含了函数的变量对象,作用域链以及this的具体指向

2、变量对象。VO (Variable Object)

变量对象包含了arguments对象,函数声明,变量声明三部分。

在执行上下文确定后。进行变量对象的生成,包含三个部分。

1、首先建立了arguments对象!(注:是一个类似于数组的对象)。

2、然后检查执行上下文中的函数声明,在VO中建立对应的函数名属性,并指向对应的内存地址。如果有相同的函数声明,那么覆盖

3、最后是检查执行上下文中的变量声明var,在VO中建立对应的属性,属性值为undefined,这就解释了变量声明。可是如果是let呢?求指导。为了避免与函数名冲突,如果与已经存在的函数名相同那么就跳过。

最后,全局上下文的变量对象时window。

3、作用域链

可以理解为一个数组,存的都是变量对象。数组最开始是当前执行上下文中的变量对象,最末端是全局变量对象。

4、闭包!!!!

原来我真的是看了十几篇文章对闭包有十几个见解的,对于闭包我是真的懵逼,当然现在我还是很蒙,可是起码搞明白了一丢丢。波哥对闭包的理解真的让我记住了这个概念。A函数内的B函数执行时调用了A函数中的变量,那么A函数就形成了一个闭包。而且闭包的产生一定是B函数要调用A函数的变量。以后还是要多学习关于闭包的用法

5、this

由于深受Java的影响,ES5又没有类的概念,原来真的搞不明白JavaScript中的this指向的是哪里。波哥的关于this的见解解开了我的疑惑。简单的说,和java中的在类中使用一样,JS中的this指向的也是一个对象!然后分成两部分来说明:

a、this是由一个函数调用的。那么如果这个方法属于一个对象,那么这个this,就是指向这个对象。如果是独立调用,也就是不属于对象,可能是函数内部声明了什么的,那么this就是指向undefined。不是严格模式下,this指向undefined就是指向全局变量

b、this直接在一个对象内部调用,比如。  var obj = { x:1 , y:this.x }。这种东西就像this.x这样的在对象内部的东西,要看这个obj。如果obj是全局对象,那么this指向全局对象。如果是函数内部的一个对象,那么this指向undefined。然后跳入a的后面的规则。

call,apply方法,强制将this指向调用这两个方法后传入的对象。好绕,就是     foo.call(obj)   this---> obj

6、总结

先记录这么多,贪多嚼不烂。感谢简书上这么多大佬对知识的分享。我知道自己的见解肯定会有很大的漏洞和不足,欢迎大佬们指点一二。最后感谢    这波能反杀 祝你早日成为签约作者。

学习文章链接

上一篇下一篇

猜你喜欢

热点阅读