JS代码的预解析和作用域
一、js代码的预解析:
js是一个解释型的语言,在代码执行之前,先对代码进行通读和解释,然后再执行代码,这就是js的代码的预解析。就像我们平时写代码的时候,很难理解为什么我们var a,打印a不报错而是undefined,又或者其他一些比如函数为什么可以随意放置啊,为什么变量会覆盖啊等等基础的问题,其实这些都是js的预解析在作怪。
js预解析:分两步执行 。
一,找关键字var和函数,把关键字和函数先提取出来进行解析。
二,运行代码,代码解析以后代码从上至下执行。
下面我们来解析一段代码:
一段代码中,如果变量跟函数同名,函数是一等公民
例:
注:预解析JS会对本代码块(script)中的所有声明的变量和函数进行处理,但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但未进行初始化以及赋值。
二、作用域:
作用域是一个变量可以生效的范围,变量不是在所有地方都可以使用的,而这个变量的使用范围就是作用域。作用域分为全局作用域和局部作用域。
1、全局作用域:
a、全局作用域中定义的变量可以在任何地方使用,
b、页面打开的时候,浏览器会自动给我们生成一个全局作用域 window
c、在函数内部不使用var定义的变量是全局作用域
d、如果一个变量的作用域是全局作用域,这个变量我们叫全局变量
例:
2、局部作用域:
a、在局部作用域中var定义的变量只能作用在这个局部作用内部使用
b、在js中只有函数能生成一个局部作用域,别的都不行
c、每一个函数,都是一个局部作用域
d、如果一个变量的作用域是局部作用域,这个变量我们叫做局部变量
练习: