JS容易犯錯的this和作用域


var someuser = { 
	name: 'byvoid', 
	func: function() {
		console.log(this.name); 
	}
}; 
var foo = { 
	name: 'foobar'
};

someuser.func(); // 輸出 byvoid

foo.func = someuser.func; 
foo.func(); // 輸出 foobar

name = 'global';
func = someuser.func; 
func(); // 輸出 global

 

在 JavaScript 中,上下文對象就是 this 指針,即被調用函數所處的環境。上下文對象 的作用是在一個函數內部引用調用它的對象本身。
在 JavaScript 中,本質上,函數類型的變量是指向這個函數實體的一個引用,在引用之 間賦值不會對對象產生復制行為。我們可以通過函數的任何一個引用調用這個函數,不同之 處僅僅在於上下文。
仔細觀察上面的例子,使用不同的引用來調用同一個函數時,this 指針永遠是這個引用所屬的對象

 

var scope = 'top';
var f1 = function() { 
	console.log(scope);
};
f1(); // 輸出 top
var f2 = function() { 
	var scope = 'f2'; 
	f1();
};
f2(); // 輸出 top

 函數作用域的嵌套關系是定義時決定的,而不是調用時決定的,也就 是說,JavaScript 的作用域是靜態作用域,又叫詞法作用域,這是因為作用域的嵌套關系可 以在語法分析時確定,而不必等到運行時確定


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM