程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> JavaScript中的關鍵字“VAR”使用詳解

JavaScript中的關鍵字“VAR”使用詳解

編輯:JAVA編程入門知識

JScript的語法教程裡面說在聲明變量時忽略var要害字是完全合法的。但是事實經常又證實想當然的結果是不可靠的。
  
  看看下面這幾個例子的結果就知道問題了: <script language="javascript">
  
  var var00 = 0;
  
  document.write(var00 + '<br>'); var var01 = 1;
  
  function foo()
  
  {
  
  document.write(var01);
  
  var var01 = 1;
  
  }
  
  foo();
  
  </script>
  
   <script language="Javascript">
  
  var00 = 0;
  
  document.write(var00 + '<br>'); var01 = 1;
  
  function foo()
  
  {
  
  document.write(var01);
  
  var01 = 1;
  
  }
  
  foo();
  
  </script>
  
   <script language="javascript">
  
  var00 = 0;
  
  document.write(var00 + '<br>'); var01 = 1;
  
  function foo()
  
  {
  
  document.write(var01);
  
  var var01 = 1;
  
  }
  
  foo();
  
  </script>
  
  這三個例子的執行結果分別是:
  
   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。

<script type="text/javascript">
  
  <!--
  
  //這樣寫js的語句塊更好一些:)
  
  -->
  
  </script>

我想知道是不是.在調用一個函數時,程序執行順序會先檢查函數內部變量中,有沒有要害字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)
  
  {
  
  // ...
  
  }


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved