执行上下文以及作用域的理解

(一)执行上下文

可以理解成,执行JavaScript代码的一种环境。(个人理解为任何事情的发生都是在一定环境下发生的,执行js代码也是一样,必然是在某种环境下进行。)
上下文分为以下3类:
1)全局执行上下文:指的是浏览器中的全局对象window对象,只有这一个。
在严格模式下,this值为undifined,非严格模式下,this值即为window对象。
执行代码时,最先执行全局执行上下文终的代码。
2)函数执行上下文:指当调用函数时创建的函数执行上下文环境。
多个函数调用会产生多个函数执行上下文。
3)eval执行上下文:执行eval函数会创建执行上下文。只不过严格模式执行eval函数,不会作用于它的
外层作用域。

(二)执行上下文栈
可以理解成执行上下文栈是一个由js引擎创建的存储函数调用的栈结构,遵循 先进后出的原则。(用来管理执行上下文)
1)执行全局代码之前,将全局上下文压入栈底。
2)开始执行全局代码,如果有调用函数情况,依次创建函数执行上下文,并执行压栈操作。执行函数。如果函数执行完毕,则将函数上下文pop出栈,并等待垃圾回收,然后往下执行代码。
3)等全部代码执行完毕,栈中只剩下全局执行上下文。他会等到浏览器关闭时出栈。

(三)作用域
es5中:1)全局作用域
//最外层函数(全局函数)和在最外层函数外面定义的变量(声明一个变量)拥有全局作用域
// 所有末定义直接赋值的变量自动声明为拥有全局作用域
//所有window对象的属性拥有全局作用域
2)函数作用域。
//函数内部声明的变量只有在函数内部可以访问,全局作用域和上一层的函数作用域无法访问。
es6中:块级作用域。
//通过let和const来实现,声明的变量,其作用域都是块级。
(四)作用域链
作用:用于查找某个变量。
函数中查找某个变量,如果当前作用域没有,就到其上一次作用域找,找到即返回,没有继续往上找,直到找到全局作用域,找到就返回,没有就报错。

var a = 1
function fun1(a){
a = 3
console.log(a) //3
function fun2(a){
console.log(a) //3
console.log(b) //报错
}
fun2(a)
}

fun1(a)
console.log(a) //正常为1,因为前面报错没打印
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值