国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中的關鍵字VAR使用詳解 分享

2024-05-06 15:49:36
字體:
來源:轉載
供稿:網友
JScript的語法教程里面說在聲明變量時忽略var關鍵字是完全合法的。但是事實常常又證明想當然的結果是不可靠的。

看看下面這幾個例子的結果就知道問題了:
這三個例子的執行結果分別是:

復制代碼 代碼如下:


Results#region Results
No.1
0
undefined
No.2
0
1
No.3
0
undefined
#endregion


原來JavaScript的變量也是有作用域的,只是它非常的籠統,就分為全局變量和函數變量。在第二個例子中得到0和1,是因為所有的變量都是全局變量,而且那個語句塊一共就定義了兩個變量。而第一個第三的函數外全局變量,確實說明var關鍵字有沒有都沒有關系。而函數內的var關鍵字就很關鍵了,它說明第二個var01是函數內的變量,所以在初始化var01前輸出自然就是'undefined'了。
那么函數里面是不是就屏蔽掉了全局的var01了呢?我們知道在C/C++可以使用::去訪問全局變量,那么JavaScript可不可以呢?這里其實我們只要明白了全局變量到底是什么東西,就好弄了。原來全局變量都是動態添加到Window對象的實例window上的屬性而以,所以我們只要在函數內用:document.write(window.var01);就可以取到其值1了。同時在這個上下文中,function內的this也是指向的window實例,我們也可以把引用寫成:this.var01。
順便說一下,重看JScript教程時,它說變量只能是[a-zA-Z_]+[a-zA-Z0-9_]*格式,可是'$'卻也可以作為變量名字符,而且還可以用在開頭,比如:$1234,更甚至于:$$$ 也是合法的變量名,faint。
我想知道是不是.在調用一個函數時,程序執行順序會先檢查函數內部變量中,有沒有關鍵字var. 然后中再根據檢查結果給不同的變量付予不同的作用域和變量值.因為我看到在這三個函數中,var01變量都是在輸出語句之后.

復制代碼 代碼如下:


function get_global_var(___name)
{
return eval(___name);
}
function set_global_var(___name,___value)
{
eval(___name+"=___value");
}
var aa=11;
Test();
WScript.Echo(aa);//22
function Test()
{
var aa=33;
WScript.Echo(get_global_var("aa"));//11
set_global_var("aa",22);
WScript.Echo(get_global_var("aa"));//22
WScript.Echo(aa);//33
}


在上面的例子中this從來就沒有指過Test,而一直都是WScript的實例。
如果我們寫一個語句:var test = new Test(); 這時Test里的this就是指的Test的一個實例了,這個實例中如果要使用Global的變量,Lostinet給出的是一個方法。
不過最簡單還是把global傳入對象,這樣定義Test:

復制代碼 代碼如下:


function Test(global)
{
// ...
}


然后這樣創建實例:var test = new Test(this); 就可以在Test實例中使用global的對象和屬性了。
是不是這樣,在new的實例中,this就指實例,否則都指WScript?如果這樣的話,換了腳本引擎,是不是情況又會不同?這個是標準嗎?
new constructor[(arguments)];
new 運算符執行下面的任務:
·創建一個沒有成員的對象。
·為那個對象調用構造函數,傳遞一個指針給新創建的對象作為 this 指針。
·然后構造函數根據傳遞給它的參數初始化該對象。
要注意的是即使當前作用域內沒有調用new,但可能在其父作用域里是調用了new的,所以“在new的實例中,this就指實例,否則都指WScript?”,前半句對,而后半句不一定。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 扶余县| 海南省| 阿尔山市| 昌乐县| 竹山县| 师宗县| 都兰县| 宁化县| 马鞍山市| 大同县| 青阳县| 神池县| 抚州市| 中牟县| 靖边县| 沿河| 库尔勒市| 曲沃县| 泽库县| 和硕县| 卢湾区| 渭源县| 喜德县| 安国市| 乾安县| 牟定县| 台前县| 易门县| 大余县| 屏山县| 五华县| 河源市| 紫阳县| 通渭县| 渝北区| 景德镇市| 青海省| 北海市| 青河县| 乐平市| 潞西市|