javascirpt--作用域--11

javascirpt中没有块级作用域

var i=10;
if(i>1)
{
	var name='henry';
}
console.log(name);//henry

for(var i=0;i<10;i++)
{
	//...
}
console.log(i);//10

javascirpt中仅两种作用域:全局作用域,函数作用域

javascirpt中除了全局作用域,只有函数可以创建作用域
作用域有上下级之分,上下级关系的确定就看函数是在哪个作用域下创建,如下,fn就是bar函数的上级作用域。
作用域的最大用处就是隔离变量,不同作用域下的同名变量不会有冲突

var a=10,  //全局作用域
	b=20;
function fn(){ //fn作用域
	var a=100,
		c=200;
	function bar(){ //bar作用域
		var a=300,
			d=4000;
	}
}

如上代码,js的作用域在函数定义时就已经确定了,而不是在函数调用时确定
作用域是一个抽象的概念,其中没有变量,要通过作用域对应的执行上下文环境来获取变量的值。
同一个作用域下,不同的调用会产生不同的执行上下文环境,因为调用的参数不同。所以,作用域中变量的值是在执行过程中产生的,而作用域是在函数创建时就确定了。

如果要查找一个作用域下某个变量的值,就需要找到这个作用域对应的执行上下文环境,再在其中寻找变量的值。

猜你喜欢

转载自blog.csdn.net/weixin_40719943/article/details/106862803