js之执行上下文和作用域

定义

  1. 变量和函数的上下文决定了它们可以访问那些数据,以及它们的行为

  2. 每个上下文都有一个关联的变量对象,而这个上下文中定义的所有变量和函数都在存在于这个变量对象之上

  3. 上下文再其所以代码都执行完毕之后会被销毁,包括定义在它上面的所有变量和函数(全局上下文再应用程序退出之前才会被销毁,比如关闭网页或者退出浏览器)

 let color = 'blue'
 function changeColor() {
   if (color === 'blue') {
     color = 'red'
   } else {
     color = 'blue'
   }
 }
 changeColor()

函数的作用域链包含两个对象:一个是他自己的变量对象(就是定义arguments对象的那个),另一个就是全局上下文的变量对象,函数内部值所以可以访问变量对象color,就是因为可以在作用域链找到它

let color = 'blue'
function changeColor() {
  let anotherColor = 'red'

  function addColor() {
    let tempColor = anotherColor
    console.log(tempColor);
    console.log(color);
     //在这里可以访问color,anotherColor和tempColor
  }

  //这里可以访问color和anotherColor,但访问不到tempColor
  addColor()
}

//在这里只能访问到color
changeColor()

上面的代码就涉及到3个上下文,全局上下文,changeColor()的局部上下文和addColor()的局部上下文

  1. 全局上下文中有变量color和函数changColor()
  2. changeColor()的局部上下文中有变量anotherColor和函数addColor(),但是在这里可以访问到全局上下文中的变量color
  3. addColor的局部上下文有一个变量tempColor,这边变量只能在当前上下文中访问
  4. 总结:内部上下文可以用过作用域链访问到外部上下中的一切,但是外部上下文无法访问内部上下中的内核东西,上下文的连接都是线性的,有序的

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值