zoukankan      html  css  js  c++  java
  • JavaScript变量提升和函数声明预解析

    1.首先理解函数作用域

    在JavaScript中,变量的定义并不是以代码块作为作用域的,而是以函数作用作用域的。也就是说,如果变量是在某个函数中定义的,那么它在函数以外的地方是不可见的。而如果该变量是定义在if 或者for这样的代码块中,它在代码块之外是可见的。另外,在JavaScript中,术语“全局变量”指的是定义在所有函数之外的变量,与之相对的是“局部变量”,所指的是在某个函数中的变量。其中,函数内的代码可以像访问自己的局部变量那样访问全局变量,反之则不行。

    2.变量提升

    在JavaScript代码运行之前其实是有一个编译阶段的。编译之后才是从上到下,一行一行解释执行。变量提升就发生在编译阶段,它把变量和函数的声明提升至作用域的顶端。(编译阶段的工作之一就是将变量与其作用域进行关联)。
    所以对于代码var a =2;来说,编译器看到的是两行代码var a; a = 2;第一个语句是声明语句,在编译阶段处理。第二个语句是赋值语句,在运行阶段处理。

    1.提升的部分只是变量声明,赋值语句和可执行的代码逻辑还保持在原地不动
    2.提升只是将变量声明提升到变量所在的变量范围的顶端,并不是提升到全局范围
    3.变量声明和函数声明都会得到变量提升,但函数声明会最先得到提升,然后是变量声明。
    4.对于函数声明来说,如果定义了相同的函数变量声明,后定义的声明会覆盖掉先前的声明
    JavaScript中变量提升------Hoisting
    JavaScript变量提升
    Javascript作用域和变量提升
    从一个例子来理解函数声明预解析

  • 相关阅读:
    Hibernate中session的产生的方式
    Hibernate 多对多关联Demo
    Hibernate 一对多双向关联Demo
    Beta(0/7)
    获得小黄衫感想(2)
    软工实践作业(十)
    成员交换情况
    Alpha事后诸葛亮
    Alpha冲刺总结
    Alpha(10/10)
  • 原文地址:https://www.cnblogs.com/fazero/p/5468193.html
Copyright © 2011-2022 走看看