JavaScript中的执行上下文与作用域

执行上下文

简介:执行上下文是JavaScript中是一个重要的概念。变量或函数的上下文决定了他们可以访问到那些数据,以及决定变量或函数的行为。每个上下文都会关联一个变量对象,此上下文定义的所有变量和函数都会存在这个对象上。

全局上下文
在浏览器中,全局上下文通常指的就是window对象。因此通过var定义的全局变量和函数都会成为window对象的属性和方法。上下文在所有代码执行完之后会被销毁,包括变量对象上的属性和函数。全局上下文在应用程序结束前会被销毁,关闭网页或者退出浏览器
在这里插入图片描述

函数上下文
每个函数也会关联一个变量对象,就是说每个函数都有自己的上下文。执行函数时,函数关联的变量对象就会被推送到上下文栈。函数执行完之后,上下文栈就会弹出该函数的上下文,将控制权交还给之前执行的上下文。

在这里插入图片描述

作用域

在执行上下文的时候,会创建变量对象的一个作用域链。作用域链决定了各级上下文中代码可以访问的的变量和函数的顺序。
正在执行的上下文的变量对象始终位于作用域链的最前端,执行函数上下文时,函数的变量对象就是其活动对象。活动对象最初只有一个变量 arguments。全局上下文没有这个变量。

代码事例

var name = '张三';
function fn1 () {
	let age = 18;
	console.log(name);
	function fn2 () {
		let fav = '打豆豆':
		console.log(age);
		// 可以访问:fav age name
	}
	fn2();
	// 可以访问:age name
}
fn1();
// 只能访问:name

在这里插入图片描述

内部上下文可以通过作用域链访问上下文中的一切,但是外部上下文无法访问内部上下文任何东西。换句话说就是:上下文之间的连接是线性的、有序的。每个上下文都可以到上一级上下文中搜索变量和函数,但是任何上下文都不能到下一级上下文中搜索。

注意:函数的上下文被认为是当前上下文的变量,因此也跟上下文中其他变量遵循相同的访问规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值