熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

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

2013-11-15 12:14:04  來源: JSP教程 
JScript的語法教程裡面說在聲明變量時忽略var關鍵字是完全合法的但是事實常常又證明想當然的結果是不可靠的  

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

復制代碼 代碼如下:
Results#region Results
No

undefined
No


No

undefined
#endregion

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

復制代碼 代碼如下:
function get_global_var(___name)
{
return eval(___name);
}
function set_global_var(___name___value)
{
eval(___name+"=___value");
}
var aa=;
Test();
WScriptEcho(aa);//
function Test()
{
var aa=;
WScriptEcho(get_global_var("aa"));//
set_global_var("aa");
WScriptEcho(get_global_var("aa"));//
WScriptEcho(aa);//
}

  
在上面的例子中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?”前半句對而後半句不一定


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20543.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.