js的作用域
js的作用域分为二种:一是局部作用域,二是全局作用域。
局部作用域:作用于函数内部,如函数的形参,只在函数内部有效,在函数外无效。也称函数作用域。这里函数的形参也是局部变量
全局作用域:是作用于整个script标签的,但它与局部作用域不影响的,全局变量在 任何代码中都可以使用
<script>
//var a = 10;
var b = 22;
alert(a); //10
function fun (a) { 二者是不影响的
var a = 20;
alert (a); //20
console.log(b); //方法内也可以使用全局全局变量
}
<script>
还有一种全局变量就是未使用var关键字声明,也会造成全局变量
var a = b = c = 9; 可以分解为 var a = 9;b = 9; c = 9;这里b, 都为全局变量
var a =9,b = 9,c = 9; 分解为:var a=9;var b=9;var c=9;
function fun () {
x = 21; // 未使用var,造成全局变量
}
fun();
console.log(x); //21
全局作用域比较浪费资源,只有在浏览器关闭,全局变量才会释放资源。
局部作用域是在函数执行完后,局部变量就会释放资源。
ES6新增块级作用域
块级作用域里面的变量可以被外面调用。
if (3>2) {
var c = 9;
…
}
alert©; //9
作用域链:
var a = 22;
function fun() {
var a = 10;
function fu() {
console.log(a); //输出的结果为10
}
fu();
}
fun();
作用域链遵循就近原则,本层没找到就到上一层去找。