![](/img/trans.png)
[英]In JavaScript, what is the difference between var a=5. and var a=5?
[英]What is the difference between using var and this, in Javascript?
這些有什么區別?
var a = 13;
this.b = 21;
document.write(a);
document.write(b);
對於全局代碼(不屬於任何函數的代碼),它們幾乎是等效的,最后都在全局對象上創建屬性。
不同的是, a
,已被宣布與var
聲明中, 變量實例過程將使用全局對象作為變量對象 (1),它會定義財產上的非可刪除的,如:
var a = 13;
delete a; // false
typeof a; // "number"
然后, b
因為全局代碼中的this
值,指向全局對象本身,也將是一個全局屬性 ,但是這個可以被刪除:
this.b = 21;
delete b; // true
typeof b; // "undefined"
不要嘗試Firebug中的第一個片段,因為Firebug的控制台在內部使用eval
運行代碼,並且在此執行上下文中,變量實例化過程的行為有所不同,您可以在此處嘗試。
(1)變量對象(VO)是變量實例化過程使用的對象,用於定義FunctionDeclarations的標識符,使用var
語句聲明的標識符,以及函數形式參數的標識符,在不同的執行上下文中 ,所有這些標識符作為VO的屬性綁定,Scope鏈由VO列表組成。
對於全局代碼,該VO是全局對象本身,這就是為什么a
目的是它的特性。 對於功能代碼,VO( 也稱為FunctionCode的激活對象 )是在調用函數時在幕后創建的新對象,這就是創建新詞法范圍的原因,簡而言之,我將討論函數。
a
和this.b
都可以簡單地通過a
和b
來解析 ,因為作用域鏈中的第一個對象又是全局對象。
此外,我認為工作知道變量實例化過程發生在代碼執行之前 ,例如:
alert(a); // undefined, it exists but has no value assigned to it yet
alert(b); // ReferenceError is thrown
var a = 13;
this.b = 21;
這些差異可能微不足道,但我認為值得了解。
現在,如果您發布的代碼片段在函數內,則完全不同 。
在您的示例中使用var
語句聲明a
標識符將是一個局部變量 ,僅可用於函數的詞法范圍(以及任何嵌套函數)。
請記住,在JavaScript塊中不引入新范圍,只有函數可以執行,並且要在該范圍內聲明變量,應始終使用var
。
該this.b
標識符將成為綁定到由該被稱為所述對象的屬性this
值,但是... 什么是this
??? 。
調用函數時,JavaScript中的this
值是隱式設置的,它取決於你如何調用它:
當您使用new
運算符時,函數內的this
值將指向新創建的對象,例如:
function Test() { this.foo = "bar"; } var obj = new Test(); // a new object with a `foo` property
當您調用作為對象成員的函數時,該函數內的this
值將指向基礎對象 ,例如:
var obj = { foo: function () { return this == obj; } }; obj.foo(); // true
當您調用沒有任何基礎對象的函數時, this
值將引用全局對象:
function test() { return this == window; } test(); // true
當您使用call
或apply
調用函數時,可以顯式設置this
值:
function test() { alert(this); } test.call("hello world!"); // alerts "hello world!"
簡而言之,如果你在一個函數中使用這些 - 那么 -
this.a; //will create a public property
var b; //will create a member variable
例如,這里是javascript中的Student類
var Student = function()
{
// Member variable
var studentId;
// Public property
this.Name = "";
}
更多信息 - 請參閱使用JavaScript進行面向對象編程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.