JavaScript作用域定义:
就是代码名字(变量)在某个范围内起作用和效果
目的:
是为了提高程序的可靠性更重要的是减少命名冲突
作用域的种类:
JS的作用域(es6之前)
全局作用域:
整个Script标签,或者是一个单独的Js文件
例如:
<script>
var num = 10
</script>
局部作用域:
在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
例如:
function fn (){
//局部作用域
}
注意:
1.在不同的作用域下命名同一个变量,变量名是不会发生冲突。
2.在同一个作用域下命名同一个变量,变量命会发生冲突。
变量作用域:
在Js中,根据作用域的不同,变量可以分为两种:
全局变量:
1.在全局作用作用域下的变量
<script>
var num = 10
</script>
此时的num就是一个全局变量
2.在全局下都可以使用
局部变量:
1.在局部作用域下的变量 或者函数内部的变量就是 局部变量
function fun(){
var num1 = 10;//num1就是局部变量 只能在函数内部使用
}
2.局部变量在外部是不能被调用的
注意:
1,如果在函数内部 没有声名直接赋值的变量也属于全局变量。
2.函数的形参也可以看作是局部变量
执行效率:
1.全局变量只有在浏览器关闭的时候才会被销毁,比较占据内存资源
2.局部变量 当我们的程序执行完毕就会被销毁,比较节省每部资源
JS块级作用域
定义:JS的块级作用域是在es6的时候新增的块级作用域
1.块据作用域就是用‘{}’花括号包裹起来的区域
作用域链
1.只要是代码就会有一个作用域
2.写在函数内部的局部作用域
3.如果在函数内还有函数,那么在这个作用域中就又可以诞生一个作用域
4.根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作‘作用域链’
<script>
function fn(){
var num = 20;
function fun(){
//第二个函数
}
}
</script>
案例:
例一:
<script>
//案例一:结果是几
function f1(){
var num = 123;
function f2(){
console.log(num);
}
f2();
}
var num = 456;
f1();
</script>