发表于: 2016-08-19 23:37:32
3 2303
今天完成的事情:配置了学员服务器,然而配不了nginx,显然后面几个任务根本不用放。
明天计划的事情:查缺补漏
遇到的问题:。。
收获:
在一段js代码拿过来真正一句一句运行之前,浏览器已经做了一些“准备工作”,其中就包括对变量的声明,而不是赋值。变量赋值是在赋值语句执行的时候进行的。
在“准备工作”中完成了哪些工作:
- 变量、函数表达式——变量声明,默认赋值为undefined;
- this——赋值;
- 函数声明——赋值;
这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。
全局代码的上下文环境数据内容为:
普通变量(包括函数表达式),如: var a = 10; | 声明(默认赋值为undefined) |
函数声明,如: function fn() { } | 赋值 |
this | 赋值 |
如果代码段是函数体,那么在此基础上需要附加:
参数 | 赋值 |
arguments | 赋值 |
自由变量的取值作用域 | 赋值 |
因此函数每被调用一次,都会产生一个新的执行上下文环境。
函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域
执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个。
javascript除了全局作用域之外,只有函数可以创建的作用域。并且在声明变量时,全局代码要在代码前端声明,函数中要在函数体一开始就声明好。除了这两个地方,其他地方都不要出现变量声明。而且建议用“单var”形式。
评论