作用域
变量作用域
全局变量
在全局作用域下声明的变量叫全局变量(函数外部定义的变量)
整个script标签内 或者是一个单独的js文件 在任何位置都可使用,浏览器关闭时才被销毁
特殊情况下在函数内不使用var声明的变量会提升为全局变量(不建议)
局部变量
在函数内部 var 声明的变量,只有在函数内部可以使用
其所在的代码块被执行时会被初始化,当代码块运行结束就会被销毁,更节省空间
注:函数的形参也可以看做是局部变量
块级作用域
es6中新增 {}
eg:
if{} for{}
目前没有块级作用域,for{}中的变量为全局变量
作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值,这种结构称为作用域链,即先在函数内部查找变量,没有就往上级函数查找,直到全局变量。
js预解析
预解析js
引擎会将js里面所有的var 还有 function 提升到当前作用于的最前面
代码执行
按照代码书写的顺序从上往下执行
预解析分为变量预解析(变量提升)和函数预解析(函数提升)
变量提升
就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
函数提升
就是把所有的函数声明提升到当前作用域的最前面 不调用函数