js基础6(作用域、js解析顺序)

1、作用域

作用域用于就是变量访问性问题

  1. 全局作用域
    • 在script其实标签到结束标签都是在全局作用域里,在函数体之外,script标签内声明的变量就是全局变量
    • 全局作用域的变量可以在任何其他的作用域访问和修改
  2. 局部作用域
    • 一个函数体就是一个新的局部作用域
    • 函数内部定义的变量在局部作用域内,函数外部作用域不能访问内部作用域的变量
    • 每个函数有不同的作用域,在其他函数中不可以访问(一个函数访问另一个函数的变量,通过传递参数实现)
    • var声明的变量提升:在函数作用域或者全局作用域中通过var声明的变量,不管在哪里声明,都会被当成在当前作用域的顶部声明变量,这个称之为变量提升
  3. 块作用域

let,const不仅仅是声明变量的区别,他们还有支持块作用域的机制,自身会产生一个块作用域(注:这里说的不是大括号、if、switch、for产生的块)

  1. 作用域链
    • 函数作用域里面访问一个变量,先从自身开始找,如果没有,就依次往上一级作用域查找, 直到全局作用域,还是没有就报错
    • 当我们处于某一个作用域里,修改某个变量值时,先修改自身作用域的值,如果没有就依次修改上一个作用域的值
    • delete:删除未声明的变量,但是不能删除已经声明的变量
  let x = 1;
  function fun (){
    let y = 1;
  }

//块作用域
if (true){
  var name = "banta";
  let color = "red";
  const x = 1;
}
console.log(name);
console.log(color ); //会报错
console.log(x);

2、js解析顺序

  1. 编译(判断语法是否符合规范)
    先去查找第一个作用域里面所有var,function的声明,但不赋值(var,function声明同一个变量时,函数会覆盖var)
  2. 执行期
    运行js代码,执行期里面有新的作用域,就会被激活,重新开始编译-执行,依次类推
console.log(a);
fun();
var a = 10;
function fun (){
  console.log(a);
}
console.log(a); // undefined undefined 10
/*
  1、编译:
    var a;
    function fun (){};
  2、执行期
    30行 --- undefined 声明变量没有赋值
    31行 --- 函数自执行,产生新的作用域
      1、编译
      2、执行
        34行 --- undefined 找到全局作用域a,声明未赋值
        返回上一个作用域继续执行
      32行 --- a = 10 赋值
      36行 --- 10 
*/
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,585评论 0 13
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,259评论 0 38
  • 前言 对于js中的闭包,无论是老司机还是小白,我想,见得不能再多了,然而有时三言两语却很难说得明白,反正在我初学时...
    itclanCoder阅读 4,301评论 1 11
  • 我是不该托你 从残破的梦里寻找那把咸咸的鸟鸣 我应该怎样度过 共一路雨 共一桥风 千声万声 笑个凄美绝伦 七重天上...
    饶晗阅读 244评论 8 7
  • 做个了断吧 最信任的友人离开了 最单纯的女伴出轨了 最尊敬的长辈进去了 最不齿的小人爬高了 最深爱的天空变灰了 最...
    向日葵爱呀爱太阳阅读 298评论 0 0

友情链接更多精彩内容