作用域&预解析

知识点一:预解析

预解析是指:在执行之前 将变量和函数的声明提升到作用于最前面

JS引擎运行JS分为两步:

预解析

(1)预解析:

        JS引擎会将JS里面所有的 var(let不会) 还有 function的声明提升到当前作用域最前面

  (2) 代码执行

        按照代码书写的顺序从上到下依次执行

知识点二:作用域

        全局作用域:

        直接编写在 script 标签之中的JS代码,都是全局作用域

        在全局作用域中有一个全局对象 window(由浏览器创建),可以直接使用。

        在全局作用域中

                 所有创建的变量都会作为 window 对象的属性保存。

                 所有创建的函数都会作为 window 对象的方法保存

        局部作用域(函数作用域):

                在函数内部就是局部作用域,这个代码的名字只在函数的内部起作用

                调用函数时创建函数作用域,函数执行完毕之后,函数作用域销毁

                每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立的

经典面试题1:

// <!-- 作用域 -->
    // 当全局变量和局部变量同名了,全局变量是不会作用域局部变量的作用域
    var a = 10

    function test() {
      console.log(a)
      a = 100
      console.log(this.a)
      var a;
      console.log(a)
    }

    // 上面代码预解析过程:
// ----------------------------------
    // 首先:全局变量
    // var a;
    // function test() {}
    // a = 10

// ------------------------------

    // 然后:是function的预解析过程:
    // 1、var a;
    // 2、 console.log(a) // underfined
    // 3、a = 100 (相当于局部的,给a赋值100;var a = 100,
    // 局部的a是100,全局的不会作用域局部了,这个时候全局a = 10,局部a =100
    // 4、this.a === 10 this的指向是window,所以this.a === 10
    // 5、console.log(a) 局部的a是100 ,所以a === 100

    test()
    // underfined 10 100

经典面试题2: 

    var a = 10;

    function f1() {
      var b = 2 * a
      var a = 20
      var c = a + 1
      console.log(b) // NaN
      console.log(c) // 21
    }
    f1()

    // 分析:
    // 预解析
    // var a;
    // function f1() {}
    // a=10;
    // ----
    // f1()执行解析过程
    // 预解析
    // var b; // underfined
    // var a; // underfined
    // var c; // underfined
    // b = 2 * a  // underfined * 2 = NaN
    // a = 20  // 20
    // c = a+1 // 21
    // console.log(b)
    // console.log(c)

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值