乐趣区

关于前端学习:Javascript预解析与变量作用域

  • 理解预解析

    JavaScript 中,在代码执行之前,会在相应的执行环境中事后将一些货色解析到内存中

  • 变量的预解析

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

    • 赋值式函数的预解析与变量的预解析规定雷同,在代码运行后,执行到改行代码后将变量赋值成一个函数
    • 申明式函数会在代码执行之前进行申明并赋值为一个函数
  • 预解析中的留神点

    • 当函数名与变量名重名时,预解析阶段会以函数优先
    • if 语句内的变量和函数无论条件是否成立都会进行预解析
    • return 前面代码尽管不执行,但也会进行预解析
  • 函数名与变量名的命名与应用标准

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

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

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

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

      • 一个变量定义在哪个作用域外面,就只能在以后作用域和上级作用域内应用,对于下级作用域无奈应用该变量
    • 作用域上下级关系——变量定义机制

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

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

    • 全局作用域中的预解析:当页面关上时就进行预解析,只解析属于全局的内容
    • 部分作用域中的预解析:当函数执行时解析函数外部,只解析属于函数外部的内容
    • 留神:函数是独自进行预解析的,当函数执行时,先进行形参赋值,在进行预解析
退出移动版