什么是作用域?
浏览器在解析代码的时候,我们代码的名字不会一直可用或有效,代码名字生效的范围就是作用域
全局作用域--所有代码可运行的环境(script双标签)或者一个单独的js文件
局部作用域---ES5中函数花括号的区域
全局变量和局部变量
在全局作用域下声明的变量,并且全局变量在全局可用(包括局部)
局部:在局部作用域中生明的变量,只能在局部使用,不能再全局使用
作用域链
变量通过作用域向上查找的线路,或者是变量向上查找的机制
预解析---变量的提升
当浏览器解析代码的时候,在当前作用域下,js代码还没有被执行,会默认将带有var和function关键字声明的变量或者函数,将变量存放到临时内存中,并且提升到当前作用域的最顶端,赋值为undefined,当遇到=这种赋值表达式时会被重新赋值
函数提升
var
function
***如果函数和变量重名的话
***用var声明的函数,都是变量的提升
***用function声明的函数,会以function提升优先