javascript引擎执行的过程的理解--语法分析和预编译阶段 (3)

3、作用域链保证了变量和函数的有序访问,查找方式是沿着作用域链从左至右查找变量或者函数,找到则会停止找,找不到则一直查找全局作用域,再找不到就会排除错误。

 

3.2.3闭包

什么是闭包?思考一下

看一下简单的例子

function foo() { var num = 20; function bar() { var result = num + 20; return result } bar() } foo()

因为对于闭包的有很多的不同理解,包括我看一些书籍(js高级程序设计),我这直接以浏览器解析,以浏览器的闭包为准来分析闭包,如图


如图所示,谷歌浏览器理解的闭包是foo,那么按照浏览器的标准是如何定义的闭包,自己总结为三点:

1、在函数内部定义新函数

2、新函数访问外层函数的局部变量,即访问外层函数环境的活动对象属性

3、新函数执行,创建新函数的执行上下文,外层函数即为闭包

 

3.2.4确定this指向

1、在全局环境下,全局执行的上下文中变量对象的this属性指向为window;

2、在函数环境下的this指向比较灵活,需要根据执行环境和执行方法确定,列举典型例子来分析

 

四、总结

由于涉及到的内容过多,下一次将第三阶段(执行阶段)单独分离出来。另开出新文章详细分析,主要介绍js执行阶段中的同步任务执行和异步任务执行机制(事件循环(Event Loop))。

 

五、参考书籍

 

你不知道的javascript(上卷)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwwwx.html