1、JavaScript作用域
就是代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性,更重要的是减少命名冲突
2、js的作用域(es6)之前
全局作用域,局部作用域
3、全局作用域
整个script标签 或者是一个单独的js文件
例如 var num=10;
4、局部作用域(函数作用域)
在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
例如 function fn( ){
//局部作用域
}
5、变量的作用域
根据作用域的不同,我们变量分为全局变量和局部变量
(1)全局变量:在全局作用域下的变量,在全局下都可以使用
注:如果在函数内部 没有声明直接赋值的变量,也属于全局变量
(2)局部变量:在局部作用域下的变量,后者在函数内部的变量就是局部变量
注:函数的形参也可以看做是局部变量
(3)从执行效率来看全局变量和局部变量
全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
局部变量当我们程序执行完毕就会销毁,比较节约内存资源
6、作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值 这种结构我们称为作用域链(就近原则)
7、预解析
我们js引擎运行js 分为两步:预解析 代码执行
- 预解析 js 引擎会把js 里面所有的var 还有function 提升到当前作用域的最前面
- 代码执行 按照代码书写的顺序从上往下执行
预解析 分为 变量预解析(变量提升)和函数预解析(函数提升)
- 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
- 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数