1. 程式人生 > >JavaScript踩坑筆記05---全域性變數、區域性變數、自由變數、靜態變數、靜態方法

JavaScript踩坑筆記05---全域性變數、區域性變數、自由變數、靜態變數、靜態方法

全域性變數、區域性變數:

JavaScript直譯器在執行任何程式碼之前會先建立一個全域性物件(global object),全域性變數就是相當於這個全域性物件的一個屬性。
JavaScript中的全域性物件為window,在它下面定義的變數為全域性變數,一般定義在最外層的作用域中。
舉例說明。

// 定義在最外層的作用域,全域性變數
var num = 11;

function fn(aaa) {
	// 定義在函式內,區域性變數
	var str = "JavaScript";
	// 引數aaa的作用域在函式內,所以也是區域性變數
	console.log(aaa);
}

自由變數:

自由變數是相對而言的。
子作用域內可以取到父作用域內的變數,這個變數相對子作用域而言,就是自由變數。
舉例說明。

// 定義在最外層的作用域,全域性變數
var num = 11;

function fn() {
	// num是父作用域的變數,相對於函式fn來說,他就是自由變數
	console.log(num);
}

靜態變數:

靜態變數即為某個類所擁有的屬性,通過“類名.靜態變數名”的方式訪問該屬性。
舉例說明。

// 定義Person的建構函式
function Person(name, age) {
	this.name = name;
	this.age =
age; } // 此時gender屬性為靜態變數 Person.gender = "男"; // 通過new關鍵字生成一個Person例項 var tom = new Person("tom", 11); console.log(Person.gender); // 男 console.log(tom.gender); // undefined // 修改靜態變數gender Person.gender = "女"; console.log(Person.gender); // 女

通過以上例子說明,靜態變數不能通過“例項.靜態變數名”呼叫,只能通過“類.靜態變數名”呼叫。

靜態方法:

同理,靜態方法為某個類所擁有的方法,通過“類名.靜態方法名”的方式呼叫該方法。
舉例說明。

// 定義Person的建構函式
function Person() {
	this.sayHello = function () {
		console.log("Hello");
	};
}

// 此時fn方法為靜態方法
Person.fn = function () {
	console.log("靜態方法");
};
// 通過new關鍵字生成一個Person例項
var tom = new Person("tom", 11);

Person.fn(); // 靜態方法
// tom.fn(); // TypeError: tom.fn is not a function

// 修改靜態方法fn
Person.fn = function () {
	console.log("靜態方法已被修改");
};
Person.fn(); // 靜態方法已被修改

通過以上例子說明,靜態方法不能通過“例項.靜態方法名”呼叫,只能通過“類.靜態方法名”呼叫。


個人學習總結,歡迎批評指正