一道精妙的題目及解答:

          f = function() { return true; };
          g = function() { return false; };

          (function()
          {
             
           if (g() && [] == ![])
           {
            f = function f()
            {
             return false;
            };
            
                  function g()
            {
             return true;
            }
              }
          })();

          alert(f()); // true or false ?


          請先思考。。。。。
















          答案很多。

          (1) firefox 下 輸出true

              參考資料 :https://developer.mozilla.org/en/JavaScript/Guide/Functions

              文章指出:

          A function can be defined based on a condition. For example, given the following function definition:

          view plainprint
          ?
          if (num == 0){  
            function myFunc(theObject) {  
              theObject.make 
          = "Toyota"  
            }  
          }  
          the myFunc function is only defined 
          if the variable num equals 0. If num does not equal 0, the function is not defined, and any attempt to execute it will fail.



          所以在if這關(guān)就過不去。所以直接返回true

          (2)chrome  輸出 false 

          在chrome 以及IE 9中是腳本引擎是符合ECMA 之規(guī)范,所以腳本  function g() 
          在 匿名函數(shù)體中有預(yù)解析(可查看淺談JavaScript 的運行機理

          (3)IE 6,7,8 輸出false 

          到跟chrome不同,其中IE 6,7,8 中錯誤的將 f = function f() 也在匿名函數(shù)中預(yù)解析至頂部聲明。



          很不是很明了了?

          對了if 中也埋藏了機關(guān): 

          1.運算符優(yōu)先級
          2. 類型轉(zhuǎn)換;
          3.== 與 === 的區(qū)別

          因為![] 為false ,于是會將[] 轉(zhuǎn)換成字符串"" ,在== 不檢查類型的情況下,非嚴格的將空字符串與false 匹配上。

          所以會有([] == ![] )   為 true
              

          在JS 手冊中關(guān)于 ‘==’ 有 原文: “如果兩表達式的類型不同,則試圖將它們轉(zhuǎn)換為字符串、數(shù)字或 Boolean 量。”

          posted on 2010-10-11 03:48 -274°C 閱讀(311) 評論(0)  編輯  收藏 所屬分類: web前端

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916109
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 临城县| 重庆市| 蚌埠市| 彭州市| 凤山县| 开阳县| 商都县| 普宁市| 汶川县| 黔东| 固阳县| 高安市| 榆树市| 玉环县| 磴口县| 潞城市| 涿鹿县| 秦安县| 昭觉县| 旌德县| 苏州市| 丰原市| 富宁县| 乾安县| 花莲市| 灌阳县| 乌苏市| 垦利县| 庄浪县| 龙泉市| 米脂县| 宣汉县| 张家川| 常德市| 嘉义市| 临安市| 昌乐县| 安阳市| 新津县| 合山市| 洪湖市|