深入理解javascript原型和闭包(8)——简述【执行上下文】上 - youngperson/study-100 GitHub Wiki
什么是“执行上下文”(也叫做“执行上下文环境”)
console.log(a)
console.log(b)
var b;
console.log(c)
var c=10;
第一句报错,a未定义,很正常。第二句、第三句输出都是undefined,说明浏览器在执行console.log(b)和console.log(b)时,已经知道了b和c是undefined,但却不知道c是10
浏览器已经做了一些“准备工作”,其中就包括对变量的声明,而不是赋值。变量赋值是在赋值语句执行的时候进行的。
console.log(f1)
function f1(){}
函数体是代码段是因为函数在创建时,本质上是 new Function(…) 得来的 function f1(){} 本质是 var f1 = new Function(){}
console.log(f3)
var f3 = function (){}
我们总结一下,在“准备工作”中完成了哪些工作: 变量、函数表达式——变量声明,默认赋值为undefined; this——赋值; 函数声明——赋值; 这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。
javascript在执行这三种情况的代码段时,会进行上文的"准备工作" 全局代码,函数体,eval代码
1.全局代码
<script>
//代码段
</script>
2.函数体
function fn(x) {
console.log(x+5)
}
//等价于
var fn = new Function("x","console.log(x+5)")
3.eval
eval("alert(123)")