JavaScript中var和this定義變量的區別
在js中聲明變量時可以使用var和this,但使用this的有很大一部分參考書是沒有的,經過查閱相關資料總結如下:
用var和this聲明變量,存在一個作用域的問題。var是在當前作用域(scope)中聲明一個變量,而this則是指向當前上下文(context)。
作用域很好理解,在函數里面,作用域就是執行var語句的那個函數,否則就是root(window或者global)。 上下文是在函數調用的時候決定的:
foo.bar() // 上下文是foo(this === foo) foo['bar']() // 上下文是root foo['bar'].apply(obj) // 上下文是obj foo['bar'].call(obj) // 上下文是obj
作用域是一個執行的過程。
這里有個誤區
用this聲明的變量並不一定就是成員變量,在函數里用this聲明變量時,首先得看當前的上下文,如果該方法是有其他對象在調用,則this指向的上下文為這個對象,如果就只是一個方法,則此時的上下文為window,this指向的上下文是window,這個時候聲明的變量才是全局變量。
var net = new Object(); //定義一個全局變量
net.AjaxRequest = function(url,onload,onerror,method,params){
this.req = null; //this指向的是net
this.onload = onload;
this.onerror = (onerror)?onerror:this.defaultError;
this.loadDate(url,method,params);
}
....................