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