预解析的知识点

先分析函数形参(默认值为undefined),再分析形参赋值(没有形参的直接忽略此步骤)
   分析函数体中所有的变量声明:
2.1 如果变量名与形参名相同时,直接忽略var;
2.2 如果变量名与形参名不同时,就相当于声明了一个变量,如var foo,值为undefined;
      分析函数体中所有的函数声明,
3.1 如果函数名与变量名相同,函数整体将作为变量的值;
3.2 如果函数名与变量名不相同,相当于var 函数名 = function 函数名 () {};
       函数执行过程分为2步:
       词法分析过程;
       执行过程

 

变量声明及函数声明预解析时,变量解析为undefined,函数解析为其本身。
预解析时函数声明优先级高于变量声明,
函数声明会覆盖变量声明,但不会覆盖变量赋值。
如果声明变量的同时初始化或赋值那么变量优先级高于函数。

一、作用域概念、预解析规则、表达式
1、作用域概念
什么是作用域:简单说就是作用的范围,指的是函数在哪些范围内可以用,而在其他部分就不可以 使用,如果需要使用就需要重新定义。
作用域的作用是什么:用来执行读或者写的操作。
2、预解析规则
script:自上而下进行解析,
函数:由里到外进行解析。
但是浏览器在执行JS代码的时候会分成两部分操作:预解析以及逐行执行代码
预解析:浏览器在开始工作的时候会先解读JS代码的关键字:比如:var function 参数等,并把解析到的内容存入一个类似仓库的地方,这个过程一般称为JS预解析。
并且,在这个阶段所有的变量,在正式运行代码之前,都会提前赋值为未定义

函数在正式运行代码之前则是整个函数块。
在这个过程中如果函数和变量重名的话只会保留函数。
3.表达式
在将上边的问题的时候我们遇到一个现象:就是函数不会改变值,但是表达式却可以。
首先先来总结一下表达式有哪些?
表达式:= + - * / % ++ -- ! 参数……
作用:表达式可以修改预解析的值!

posted @ 2019-06-25 11:44  羊羊羊小童鞋  阅读(156)  评论(0编辑  收藏  举报