深入理解javascript原型和闭包(8)——执行环境

在说“执行环境”前先看一段代码

上图中,第一句报错,因为a没有定义。第二句和第三句是变量提升(JS在执行前会对声明部分做完整解析,同时局部会覆盖全局)

这说明,在一段JS代码一句一句执行前,浏览器已经做了一些准备工作。其中包括对变量的声明,而不是赋值。变量赋值是在赋值语句执行时才执行的。可看下图:

还有一种情况

此时,对this直接赋值

第三种情况

上面情况需要注意函数声明和函数表达式是两个不同的概念。虽然两者都很常用,但在准备工作时,却是两种待遇。

可以看出函数声明是直接赋值了,而函数表达式却是undefined。

这就可以得出结论,JS代码准备工作都做了些什么:

1、对变量声明部分做解析,不包括赋值

2、this——赋值

3、函数声明——赋值

4、函数表达式——只解析,不赋值

 

 原文链接http://www.cnblogs.com/wangfupeng1988/p/3986420.html

 

posted @ 2018-03-13 10:05  endlessmy  阅读(103)  评论(0编辑  收藏  举报