JS 作用域

变量作用域通俗的意思是变量的作用范围。

  • JS 局部作用域。
  • JS 全局作用域。
  • JS 生命周期。

JS - 局部作用域

局部变量:在函数内声明的变量。
局部作用域:作用域为这个函数。

function abc () {
	var x = 10;
};
console.log(x);  //控制台将会报错 not defined 未定义

局部变量只作用于函数内,因此不同的函数可以使用相同名称的变量。

函数内部可以嵌套函数,内部函数能访问外部函数定义的变量,反过来则不行。
若内外部函数变量同名,访问变量时,则为自身变量:

function abc(){
	var i = 10,
	    y = 50;
	
	function a(){
		var x = 20,
		    y = 60;
		console.log(i);  //访问外部函数变量,结果:10
		console.log(y);  //相同变量名,则为自身变量 60
	}
	
	a();
	console.log(y);    //相同变量名,50
	console.log(x);    //访问内部函数变量,报错
}
abc();

JS - 全局作用域

全局变量:函数外定义的变量。
全局作用域:全局变量的作用域为网页中所有脚本和函数。

JS 默认有一个全局对象 window,全局作用域的变量实际上是被绑定到 window 的一个属性。
但是通常是直接忽略 window :

var a = 10;
console.log(a);        //10
console.log(window.a); //10

如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量:

function abc(){
	a = 10;
}
abc();
console.log(a);  // 10 ,a没有声明,则为全局变量

JS - 生命周期

JS 变量的生命周期开始于在它声明时。
局部变量:函数执行完毕后销毁。
全局变量:页面关闭后销毁。