隨筆-57  評論-129  文章-0  trackbacks-0

          帶ID的函數表達式:

          var fn = function fnid(){};  

          按照ECMA262定義,上面這段腳本等價于:

          with({fnid:null}){  
            
          var fn = fnid = function(){};  
          }  

           


          注意:fnid在with外是不可見的,但是IE沒有嚴格遵守ECMA規范(同樣的情況發生在catch語法上)。在IE上相當于:
          var fnid = function(){};  
          var fn = fnid;  

          在剛剛發布的JSA1beta上,還不能處理這個問題(新版本將這周內發布)。同時,鑒于這種語法在不同瀏覽器上表現不同,還是建議盡量避免使用(這點上,我個人還是更喜歡ie的方式)。

          var語句:
          太常用了,但是,沒有注意還是很容易出問題。
          var 用來聲明全局或函數變量,但是,只是申明,重復申明也不能置空,范圍是函數或者全局空間,位置在函數或腳本頂端,與塊無關,這些與常用高級語言區別很大。

          怪癖的代碼

          var vaiable =0;  
          function test(){  
             variable 
          =1;//別擔心,不會改動全局變量vaiable  
             //do ..  
             var vaiable;//變量申明無順序(一律置頂),只是賦值有順序。  
          }  

           

          常見錯誤有:

          var flag;//這里可能有人(包括我自己)喜歡自做聰明的利用一下變量的初始值undefined  
          while(!flag){//沒準那個角落里面已經給當前函數內同名變量給賦值了就慘了  
            //..  
          }  

           

          posted on 2007-06-30 16:47 金大為 閱讀(1267) 評論(3)  編輯  收藏 所屬分類: JavaScript

          評論:
          # re: JS幾處怪癖的語義 2007-06-30 21:44 | 豬頭小隊長
          var vaiable =0;
          function test(){
          variable =1;//別擔心,不會改動全局變量vaiable
          }

          test();
          alert(vaiable);

          打印的是1,而不是0,怎么回事?  回復  更多評論
            
          # re: JS幾處怪癖的語義 2007-07-01 08:11 | 金大為
          @豬頭小隊長
          呵呵,你看看你這個函數和我的例子有什么不同吧:)  回復  更多評論
            
          # re: JS幾處怪癖的語義 2007-07-01 10:39 | 豬頭小隊長
          hehe,faint  回復  更多評論
            
          主站蜘蛛池模板: 广宁县| 巴中市| 方城县| 历史| 永安市| 镇宁| 宾阳县| 建平县| 辰溪县| 汪清县| 东莞市| 柳州市| 达尔| 开远市| 陕西省| 张掖市| 昔阳县| 扎囊县| 云梦县| 安远县| 苏尼特右旗| 佛山市| 泰来县| 巴林右旗| 潜江市| 尉犁县| 石首市| 阿合奇县| 富宁县| 永济市| 茶陵县| 玛纳斯县| 平度市| 盐亭县| 班戈县| 镇安县| 策勒县| 寻甸| 广西| 阳原县| 台北县|