javascript
关于JS中的 NEW 和VAR
很多人都覺得在javascript聲明一個變量,加var和不加var沒有什么區(qū)別,實際上是一個錯誤的觀點,如果在函數(shù)外面,也就是說在window區(qū)域加不加var確實是一樣,因為都會是全局變量的效果,而如果在函數(shù)內部,加var就是局部變量,不加是全局變量。?
function test(){?? ?
var1 = 2; ?
alert(var1);?????
}???
test();??
alert(var1);
這樣可以顯示為2
function test(){?? ?
var var1 = 2; ? alert(var1);?????
}?? test();??
alert(var1);?
則為變量未定義錯誤?
this多用于函數(shù)內部,它永遠指向調用他的那個對象,看看下面的例子就明白了?
var test={ ??
a:"test" // a省略了this,不是私有的(var); ??
msg:function(){ ?// msg省略了this,不是私有的(var); ???
? a="1234"; ??????????
// a為全局變量,可以在最外邊嘗試alert(a),可以得到1234 ???? alert(this.a); ????
var msg1= function(){ ???????
alert(this.a); ?
??} ? ??
msg1(); ?
? }?
}
test.msg(); 這樣會分別顯示 "test" ,"1234".?
?
再舉一個例子:
var name = "The Window";???
var object = {??
name : "My Object",???
getNameFunc : function(){??
return function(){??
return this.name; ?
?};???
}???
};???
alert(object.getNameFunc()());? //The Window
但this也不是這么簡單,在看看下面的例子
function test1()?? {?? ?
this.var01 = "test";
}?
function test2()?? { ?
alert(var01);
}?
var a= new test1(); test1(); test2(); alert(a.var01);?
都可以得到"test".?
可以發(fā)現(xiàn)var01變量既是一個全局變量,又是test1內的成員變量。也就是說,如果在函數(shù)內部用this定義的變量,如果這個函數(shù)你不是直接來運行,而是作為一個類來new的話,雖然函數(shù)也要執(zhí)行一遍,但里面的this定義的 變量是作為類的成員變量來定義的,也就是一個局部變量,上面的測試代碼,如果去掉test1();? test2()運行就是未定義變量錯誤了。?
說到變量,最后提一下js變量無類型的說法,這個說法本身沒有錯,但js變量無類型,這話很模糊,有的人會理解成js 里面沒有數(shù)據(jù)類型。這顯然是錯誤的,js 里面也有數(shù)字,字符,布爾,類等數(shù)據(jù)類型。說變量無類型,指的是剛定義一個變量的時候,這個變量是沒有類型的,當你給它賦值的時候,值是什么類型,那這個變量就是什么類型了
轉載于:https://www.cnblogs.com/fjf1993/p/7423533.html
總結
以上是生活随笔為你收集整理的关于JS中的 NEW 和VAR的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马斯克被指虚伪:一边解雇不满的员工,一边
- 下一篇: 精神层次很高的星座女(心胸豁达,能力强的