JavaScript作用域
JavaScript作用域:就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性和减少命名冲突
js的作用域(es6)之前:全局作用域 局部作用域
全局作用域:整个script标签 或者是一个单独的js文件
<script>
var num = 10;
console.log(num);
</script>
局部作用域(函数作用域):在函数内部
<script>
function fn(){
var num = 20;
console.log(num);
}
fn();
</script>
变量的作用域
变量的作用域:根据作用域的不同变量分为全局变量和局部变量
- 全局变量:全局作用域下的变量(如果在函数内部,没有声明直接赋值的变量也属于全局变量)
- 局部变量:在局部作用域下的变量(函数的形参也可以看做是局部变量)
全局变量只有浏览器关闭的时候才会销毁,比较占内存,局部变量在函数结束的时候就销毁,更节省内存空间
块级作用域
js在es6新增块级作用域{}
作用域链
作用域链:根据内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链(就近原则)
<script>
var num = 10;
function fn(){
var num = 20;
function fun(){
console.log(num);
}
fun();
}
fn();
</script>
预解析
预解析分为 变量预解析(变量提升)和函数预解析(函数提升)
- 变量提升 就是把所有的变量声明提升到当前作用域的最前面 不提升赋值操作
- 函数提升 就是把所有的函数声明提升到当前作用域的最前面
<script>
console.log(num);
var num = 10;
fun();
var fun = function(){
console.log(10);
}
</script>
|