JavaScript學習筆記九 —— 變量的作用域、let、const

JavaScript學習筆記九 —— 變量的作用域、let、const


參考教程B站狂神https://www.bilibili.com/video/BV1JJ41177di


變量作用域

在js中,var定義變量實際是有作用域的。
如果在函數體中申明,在函數體外不可以使用(閉包可以實現在函數體外使用)

function a(){
	var x = 1;
	x = x + 1
}
x = x + 2 //這裏控制檯會報錯

如果函數嵌套,內部函數可以訪問外部函數變量,外部不可以訪問內部,所以內外部函數的變量重名沒有影響

提升變量作用域

function a(){
	var x = "x" + y;
	console.log(x);
	var y = 'y';
}

結果 xundefined(x未定義)
說明:js執行引擎,自動提升了y的聲明,但是不會提升變量y的賦值
相當於

function a(){
	var y;
	var x = "x" + y;
	console.log(x);
	y = 'y';
}

規範:把所有的變量定義都放在函數的頭部,不要亂放,便於代碼維護。如下

function a(){
	var x = 1,y = x + 1,z;

	//之後隨意用,如果想要使用一個新的變量,就寫還在前面定義的地方。
}

全局對象windows

var x = 'xxx';
alert(x);
//alert(window.x); //默認所有路徑都會自動綁定在window對象下,和上面的效果一樣
window.alert(window.x); //alert本身也是一個window變量,和上面一樣
var x='xxx';

window.alert(x);

var o1d_ _alert = window.alert;

//o1d_ alert(x);

window.alert = function () {
};
// 發現alert() 失效了
window.alert(123);

//恢復
window.alert = o1d_alert;
window.alert(456);

js實際上只有一個全局作用域,任意變量(函數可以視爲變量),假設沒有在函數作用內找到,就會向外查找,如果在全局作用域都沒有找到,報錯RefreceErro

規範
由於所有的全局變量都會綁定在window上,如果不同的js文件使用了相同的全局變量,會造成衝突,減少衝突的方法:

//唯一全局變量
var a = {};

//定義全局變量
a.name = 'xxx';
a.add = function(a,b){
	return a+b;
}

把自己的代碼全部放入自己定義的唯一空間名字中,降低全局命名衝突的問題。(jQuery就是這樣)

局部作用域
關鍵字let,使用var 的話是全局作用域

常量
const 修飾後爲常量,不能修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章