隨筆-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 金大為 閱讀(1257) 評論(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  回復  更多評論
            
          主站蜘蛛池模板: 禄丰县| 重庆市| 崇州市| 张掖市| 北安市| 乾安县| 广元市| 砀山县| 定兴县| 丰宁| 石渠县| 龙游县| 聂拉木县| 广水市| 甘孜| 宁津县| 金昌市| 怀仁县| 肇庆市| 台东县| 苏尼特右旗| 通山县| 芦山县| 故城县| 阿城市| 应城市| 饶平县| 稻城县| 郧西县| 遂平县| 寻乌县| 民县| 蚌埠市| 阜平县| 育儿| 江达县| 岳阳市| 民县| 巨鹿县| 靖远县| 中江县|