作用域、作用域链

作用域就是变量与函数的可访问范围
全局作用域 : 在代码中任何地方都能访问到的对象拥有全局作用域
1、最外层函数和在最外层函数外面定义的变量拥有全局作用域

var a = 10;
function tmp(){
	var b = 20;
}
console.log(a);

2、所有末定义直接赋值的变量自动声明为拥有全局作用域

function tmp(){
 	b = 20;
}
tmp();
console.log(b);

3、所有window对象的属性拥有全局作用域

局部作用域 : 局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部

function tmp(){
	var b = 20;
}
tmp();
console.log(b);

作用域链

console.log(a);		//undefined
function str(){
	console.log(b);		//undefined
	var b = 5;
	console.log(a);		//10
	b += 5;
	function fun(){
		console.log(c);		//undefined
		var c = 3;
		b++;
		console.log(b);	//11
	}
	fun();
}
var a = 10;
str();

全局GO{
a : undefined --> 10
str : undefined --> function…
}
str AO{
b : undefined --> 5 --> 10
fun : undefined --> function…
}
fun AO{
c : undefined --> 3
}
funAO–>strAO–>GO
fun[[Scope]]里面有funAO、strAO、GO
str[[Scope]]里面有strAO、GO
AO执行完就消失

先看层级关系
有几层就有几个灶
越往里走,能调用的参数越多
main()只有GO,且不算在灶里面
第一层只有GO和自己的AO
从第二层开始,每一层都包括外面一层的AO和GO还有自己的AO

同一个作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值