javascript执行上下文环境
今天,想对javascript的执行上下文环境做一个深入的理解。之前一直都有这打算的,但无奈忙着忙着就忘记了。今天看了一篇博客,对执行上下文环境的理解可以说是醍醐灌顶。 一、对一段代码的理解开始 在浏览器的控制台输入以下代码段: 这个结果说明,代码在一句句执行之前,浏览器已经做了一些准备工作,所以,后面两个都没有报错。下面再看一段代码: 这个结果说明,函数声明时,把整个函数赋值了,而函数表达式和变量一样,只是申明。 我们总结一下,在“准备工作”中完成了哪些工作: 变量、函数表达式——变量声明,默认赋值为undefined; this——赋值; 函数声明——赋值; 这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。 二、上面是在全局作用域下的执行上下文环境,下面再看下函数作用域下的上下文环境 以上代码展示了在函数体的语句执行之前,arguments变量和函数的参数都已经被赋值。从这里可以看出, 函数每被调用一次,都会产生一个新的执行上下文环境。 再看一段代码: 可以看出, 函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域。 最后的总结: 全局代码的上下文环境数据内容为: 普通变量(包括函数表达式), 如: var a = 10; 声明(默认赋值为undefined) 函数声明, 如: function fn() { } 赋值 this 赋值