Javascript——预解析与变量作用域

  • 了解预解析

    JavaScript中,在代码执行之前,会在相应的执行环境中预先将一些东西解析到内存中

  • 变量的预解析

    • 在代码执行之前,编译器会将var关键字定义的变量进行声明,但不会进行赋值,在代码运行后,执行到改行代码后进行变量赋值
  • 函数的预解析

    • 赋值式函数的预解析与变量的预解析规则相同,在代码运行后,执行到改行代码后将变量赋值成一个函数
    • 声明式函数会在代码执行之前进行声明并赋值为一个函数
  • 预解析中的注意点

    • 当函数名与变量名重名时,预解析阶段会以函数优先
    • if语句内的变量和函数无论条件是否成立都会进行预解析
    • return 后面代码虽然不执行,但也会进行预解析
  • 函数名与变量名的命名与使用规范

    • 变量名尽量以名词命名
    • 函数名尽量以实现的功能名命名
    • 函数使用时尽量先定义在进行调用,最好使用赋值式函数定义
  • 变量作用域

    • 全局作用域:每一个页面都是一个全局作用域
    • 局部作用域:每一个函数内部就是一个局部作用域

    Javascript——预解析与变量作用域_第1张图片

    • 作用域中变量的上下级关系和作用

      • 上下级关系确定函数在哪个作用域下创建,变量取值都会在当前作用域中查找,如果没有查到就会像上级作用域查找,直到查到全局作用域,这个查找的过程叫做作用域链
    • 作用域上下级关系——变量定义机制

      • 一个变量定义在哪个作用域里面,就只能在当前作用域和下级作用域内使用,对于上级作用域无法使用该变量
    • 作用域上下级关系——变量定义机制

      • 当需要使用一个变量时,首先在当前作用域查找,如果定义了,则直接使用变量,如果没有定义则去上级作用域查找,如果到 window 也没有该变量则直接报错
    • 作用域上下级关系——变量赋值机制

      • 当需要给一个变量赋值时,会首先在当前作用查找,如果定义了,则直接进行赋值,如果没有定义,则去上级作用域查找,如果到 window 也没有该变量,则将该变量定义为一个全局变量后进行赋值
  • 作用域中的预解析

    • 全局作用域中的预解析:当页面打开时就进行预解析,只解析属于全局的内容
    • 局部作用域中的预解析:当函数执行时解析函数内部,只解析属于函数内部的内容
    • 注意:函数是单独进行预解析的,当函数执行时,先进行形参赋值,在进行预解析

你可能感兴趣的