美文网首页程序员
js基础6(作用域、js解析顺序)

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

作者: 逆_3ec2 | 来源:发表于2018-08-27 18:24 被阅读0次

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 
*/

相关文章

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

    1、作用域 作用域用于就是变量访问性问题 全局作用域在script其实标签到结束标签都是在全局作用域里,在函数体之...

  • let 和 const

    一、JS中的块级作用域 ES6之前JS不支持块级作用域在ES6之前,JS是没有块级作用域这个概念的,只有全局作用域...

  • JS作用域的练习

    Js作用域练习demo1 Js作用域练习demo2 JS作用域练习demo3 JS作用域练习demo4 JS作用域...

  • js解析顺序和作用域

    一、 javascript解析顺序 (定义)先解析var、function、参数;a) 该步骤的var只定义...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • JS基础:作用域

    一、作用域概念-预解析规则、表达式 作用域: 域:空间,范围,区域……作用:读,写 浏览器——JS解析器: 在浏览...

  • js 变量提升和函数提升

    在js中只有两种作用域,全局作用域和函数作用域,在ES6之前,js是没有块级作用域。 JavaScript 代码的...

  • JavaScript块级作用域

    块作用域{ }JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中...

  • JS进阶系列

    在JS入门难点解析系列中,我们对JS的一些重要概念,比如:作用域,作用域链,原型,原型链,继承,活动对象,this...

  • JS语法基础整理

    块作用域 : { }JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称E...

网友评论

    本文标题:js基础6(作用域、js解析顺序)

    本文链接:https://www.haomeiwen.com/subject/pxkmpftx.html