js中this的用法

在函數內部有兩個特殊對象:arguments和this,this的指向實際上是很是靈活的,它會根據調用function的對象不一樣,致使了this的指向不一樣。當在全局做用域下調用函數時,this指向window。例如:javascript

window.color = 'red';
var o = {color: 'blue'};
function sayColor(){
   alert(this.color);
}
sayColor(); //'red'
o.sayColor = sayColor;
o.sayColor(); //'blue'

  咱們知道this對象在執行時是基於函數的執行環境綁定的:當函數被做爲某個對象的方法調用時,this指向那個對象。但匿名函數的執行環境具備全局性,因此this指向window。但在閉包中,這一點可能不太明顯。先說一下閉包吧,個人理解是在一個函數內部建立另外一個函數,而內部函數能夠訪問外部函數做用域中的變量,這是由於內部函數的做用域鏈中包含外部函數的做用域。java

var name = 'the window';
var object = {
  name: 'My object',
  getFunc: function (){
     return function(){
        return this.name;
     }
  }
};
alert(object.getFunc()());   //'the window'

    看到這裏,你們可能會驚訝,爲何this指向的是全局做用域。由於內部函數在搜索this和arguments時,只會搜索到其活動對象,永遠不可能直接訪問外部函數中的這兩個變量。閉包

爲了讓閉包內的this能訪問到外部做用域中的變量,咱們能夠在定義匿名函數以前把this附一個值,當定義閉包後就能夠訪問外部變量了。由於它是咱們在外部函數(包含函數)中特地聲明的一個變量。函數

var name = 'the window';
var object = {
  name: 'My object',
  getFunc: function (){
     var that = this;
     return function(){
        return that.name;
     }
  }
};
alert(object.getFunc()());   //'My object'
相關文章
相關標籤/搜索