javascript中的原型,原型链以及闭包(8)---------执行上下文

首先我们来说下,执行上下文简单来说就是js代码执行环境。总所周知,js是没有块级执行环境的【if/else】,只有函数体【function/object】执行环境。那就引出了全局变量和局部变量。那在js中,js引擎是怎样处理变量的呢·?函数体又如何?

关于变量

   <script>
    console.log(a);//报错【a is not defined】
	//当注释上面一行代码后
	console.log(b);//undefined
	var b;
	
	console.log(c);//undefined
	var c = 10;
	
	</script>

第一个a报错,不用解释。但是为什莫后面bc都是undefined。这是因为对于变量而言,js并不是逐行解释,它存在着一个准备阶段,将上面的代码解析后是

<script>
console.log(a);

var b;
b = undefined;
console.log(b);

var c;
c = undefined;
console.log(c);
c = 10;

</script>

在同一层次的执行上下文中,js引擎会首先检索变量的定义,作为准备工作,在遇到赋值语句之前定义为undefined,这也就是为什莫说它打破了js逐条编译的特点。

关于函数体

<script>
	console.log(fn1);//function fn1(){}
	function fn1() {};//函数声明,直接声明一个函数
	
	console.log(fn2);//undefined
	var fn2 = function() {};//函数表达,利用一个变量表达函数
</script>

由结果可知:在准备阶段中,声明函数,则是直接赋值【因为此时赋值是声明的一部分】;函数表达式只是声明表达式变量。

所以总结可知:同一层次的执行上下文中,js引擎会会检索变量和函数体的声明,但并不对其做赋值操作object = value

关于执行上下文中的作用域,这里有,我就不多解释了。

菜鸟爬行中…

猜你喜欢

转载自blog.csdn.net/h1234561234561/article/details/87922357