1.javascript作用域:
代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性,更重要的是减少命名冲突。
2.js的作用域(es6)之前:全局作用域 局部作用域
3.全局作用域:
整个script标签 或者是一个单独的js文件
4.局部作用域:
在函数内部就是局部作用域这个代码的名字只在函数内部起作用
<script>
//全局作用域
var num = 1 ;
console.log(num);
function fn() {
//局部作用域
var num = 10 ;
console.log(num);
}
</script>
5.全局变量:
在全局作用域下的变量
可以作用于函数内部
6.局部变量:
在局部作用域下的变量,函数内部的变量
只能在函数内部使用
7.注意 如果在函数内部 没有声明直接赋值的变量也属于全局变量
//全局作用域
var num = 1 ;//全局变量
console.log(num);
function fn() {
//局部作用域
var num = 100;//局部变量
num1 = 10 ;//全局变量
console.log(num);
}
fn();
console.log(num1);
</script>
8.局部变量和全局变量执行效率的区别:
8.0全局变量只有浏览器关闭时候才会销毁,比较占内存。
8.1 局部变量当我们程序执行完毕就会销毁,比较节约内存。
9.作用域链:
内部函数访问外部函数的变量,采取的是链式查找的方式决定取哪个值。
var num =10;
function fn() {//外部函数
var num = 20;
function fun() {//内部函数
console.log(num);
}
fun();
}
fn ();//20
10.预解析:
我们的js引擎运行js 分为两步: 预解析 代码执行
10.1 预解析 js引擎会把js里面所有的var 还有function提升到当前作用域的最前面。
10.2 代码执行 按照代码书写顺序从上往下执行
10.3预解析分为 变量预解析(变量提升) 和函数预解析(函数提升)
10.4变量提升 就是把所有的变量声明提升到当前的作用域最前面不提升赋值操作
var a=b=c=9;
相当于 var a = 9; b=9 ; c=9;