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 指針永遠是這個引用所屬的對象javascript
var scope = 'top'; var f1 = function() { console.log(scope); }; f1(); // 輸出 top var f2 = function() { var scope = 'f2'; f1(); }; f2(); // 輸出 top
函數做用域的嵌套關係是定義時決定的,而不是調用時決定的,也就 是說,JavaScript 的做用域是靜態做用域,又叫詞法做用域,這是由於做用域的嵌套關係可 以在語法分析時肯定,而沒必要等到運行時肯定java