作用域
概述
JavaScript作用域:就是代码名字在某个范围内起作用和效果
目的是为了提高程序的可靠性,更重要的减少命名冲突
全局作用域
整个script标签或者是一个单独的js文件
var num = 10;
局部作用域(函数作用域)
在函数内部就是局部作用域,这个代码名字只在函数内部起效果和作用
function fn(){
//局部作用域
var num =20;
}
全局变量和局部变量
变量的作用域
全局变量
在全局作用域下的变量
var num = 10;
//num就是一个全局变量
局部变量
在局部作用域下的变量
后者在函数内部的变量就是局部变量
<script>
function fn1(){
var num1 = 10;
}
</script>
num1就是局部变量,只能在函数内部使用
注意点
1.如果在函数内部没有声明,直接赋值的变量也属于全局变量
2.函数的形参也可以看作局部变量
3.从执行效率上来看:
(1)全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
(2)局部变量当程序执行完毕就会销毁,比较节约内存资源
JavaScript没有块级作用域
es6新增块级作用域
块级作用域就是有{},例如if{},for{}
作用域链
只要有代码,就有作用域
写在函数内部的局部作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链
作用域链案例
<script>
function f1(){
var num = 123;
function f2(){
console.log(num);
}
f2();
}
var num = 456;
f1();
</script>
结果a = 4,b = 22