非主流javascript教學(六)

來源:互聯網
上載者:User

呃, 這次我們提下jQuery

我們知道jQuery是javascript裡面一個很優秀的傢伙。

很多人甚至是為了jQuery而開始學習javascript的。

比如undefined同學。

 

=。=

然後某同事在用jQuery的時候出問題了。

 

呃, 出什麼問題?

jQuery能出問題無非就這麼幾種:

1 jQuery有bug。

2 Ajax的問題(基本上可以認為jQuery有bug)

3 $符號的衝突問題。

 

大家都知道$符號衝突了, 調用noConflict就OK了唄。

其實不是這樣的。

其實問題比這嚴重的多。

 

 比如我同事碰到這個, 他們在項目中使用了$, 大概就是這麼定義的:

 

function $(id){
    return document.getElementById(id);
}

 

 

讀過前面文章的人都知道, 這種寫法是最糟糕的。

理由:

1 你丫的使用全域變數!

2 用全域變數我們也就認了,你丫的沒有用匿名函數! 你應該var $ = function(){。。。。} 這樣才對嗎!!!

3 你丫的居然用這麼不裝13的寫法, 你怎麼好意思說自己會javascript啊!!!

 

當然了, 代碼已經寫好了, 也就沒有去改的必要了。 

但是問題來了:

同事在項目二期的時候計劃引入jQuery, 然後呢? 大家可以猜到, 一定會用noConflict了吧?一定可以完美解決了吧?錯!

首先是, 兩個js誰放前面?

 

大家說, 那還用問, 當然是jQuery放前面, 類庫放前面嗎, 自己的代碼放後面嗎, 國際慣例。

so, 問題來了:

那麼jQuery豈不是被我們的$給覆蓋了嗎?

錯!沒有覆蓋。 這個問題就蛋疼了。 說起來也挺麻煩噁心的。 反正, 如果他的定義是這樣的:

 

window.$ = function(id){
    return document.getElementById(id);
}

 

 就是我們提倡的裝13的寫法, 這樣就不會出問題~

這個不管了。 現在, 反正$衝突了, 總該讓noConflict出場了吧?

又錯了。。。

我們用noConflict的時候一定要知道為什麼noConflict可以解決衝突。

 

jQuery在載入的時候, 備份了一次$, 然後如果你調用noConflict, 那麼jQuery會將備份的值給還原回去。

好, 問題來了。

我們看下:

1 最初, $沒有定義。 那麼$===undefined

2 jQuery載入。 他備份了$, 然後定義$ 所以備份的是undefined, 

3 載入同事的代碼。  由於一個詭異的問題, $衝突了。

4 這個時候試圖用noConflict來解決衝突(當然這個思路是完全錯誤的。 暫時不去責備他)。

5 undefined被還原。

 

怎麼怎麼, 怎麼回事?undefined你咋這麼喜歡湊熱鬧, 到處都有你啊?

 

=。=

不好意思, 事情已經發生。 請尋找解決方案, 而不是一味的去責備誰。

那麼, 解決方案是什麼呢?

其實根本不需要noConflict這麼麻煩, 我們的代碼在jQuery之後載入, 我們覆蓋它不就行了嗎?

 

代碼:就用剛剛我們說的裝13寫法。

$變數輕鬆的被覆蓋掉了。 

而使用jQuery的辦法則是大家熟知的:

(function($, undefined){
    //自己的代碼在這裡
})(jQuery);

 

 搞定。 裝13寫法再次戰勝其他語言中的常規寫法。。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.