簡體   English   中英

一些一般的JavaScript問題

[英]some general JavaScript questions

Flattr Javascript API描述

<script type="text/javascript">
<!--//--><![CDATA[//><!--

    (function() {
        var s = document.createElement('script'), t = document.getElementsByTagName('script')[0];

        s.type = 'text/javascript';
        s.async = true;
        s.src = 'http://api.flattr.com/js/0.5.0/load.js';

        t.parentNode.insertBefore(s, t);
    })();

//--><!]]>
</script>

我對<!--//--><![CDATA[//><!--//--><!]]>有點好奇。 我猜這是一些欺騙不懂<script> -tag的舊瀏覽器的技巧。 但是<!--不夠嗎? CDATA到底是關於什么的? 而且,如果我不關心舊的瀏覽器,那么所有這些都已經過時了,對嗎? (順便說一句,沒有人知道在所有的任何瀏覽器,如果我不會把這個東西還有誰也感到困惑?)

然后我想知道函數定義。 為什么在那兒? 為什么不直接調用代碼? 是否不向全局名稱空間發送垃圾郵件? 如果是這樣,難道沒有比這更簡單,更簡單的方法了,例如,僅將代碼放入{}

黑客之間的結合是:

  • 從HTML引入腳本元素開始就應對瀏覽器(十年前)
  • 處理XHTML中包含&,<和>的JavaScript
  • 當將XHTML視為HTML而不是XHTML時(即幾乎始終)補償XHTML解決方案
  • 阻止其他黑客相互干擾

坦白說,您可以(並且應該)忘記不理解<script>瀏覽器(請注意,這與不支持JS並不相同,這意味着根本無法識別該元素,因此(有效)將其視為<span> )。 如果這樣做並使用XHTML,則可以僅使用以JS注釋( // )為前綴的CDATA標志。

通常,您還應該避免使用XHTML。 除非您要處理一個堅持要生成XHTML的服務器端系統,並且要把它轉換成HTML還要付出更多的努力,否則要處理編寫與HTML兼容的XHTML的所有問題,那么XHTML幾乎是不值得的。

如果您不使用XHTML或不關心甚至不講HTTP 1.1的瀏覽器,那么您只需要script標簽和腳本,根本不需要任何包裝。

在這個特定示例中,無論如何您都不需要CDATA標志-該腳本不包含任何在XML中具有特殊含義的字符,因此您不需要一條將這些字符視為文本而不是標記的指令。

在當今的HTML5時代, CDATA毫無用處,並且(function() {...})()包裝了代碼以使var聲明在該函數中本地化。
全局變量可能會導致與頁面上的另一個代碼發生不必要的交互。

對於netscape 1來說,注釋是必需的,因為腳本標記是在netscape 2中引入的。所以,是的...不再需要了;)

text="text/javascript"

可能不需要IE3或4,但腳本標記的默認值始終是javascript。

{}塊作用域在JavaScript中不存在,只有全局作用域和函數作用域,因此需要將代碼包裝在函數中並始終使用'var'聲明來防止全局污染。

(function(){}());

不再被稱為駭客,這是一種完美的合法技術,盡管尋找外行可能有點嚇人。 以下內容可能被認為更漂亮...

function init(){
    // code
}
init();

但是隨后您要引入一個稱為“ init”的全局函數。 此外,大多數經驗豐富的JS程序員都熟悉並認識到自調用匿名函數模式,這是一個更有用的模式。

(function(global, doc, undefined){
    //code
}(this, document));

“ global”變量現在是對窗口對象的引用,“ doc”變量現在是對document的簡寫引用,而undefined是undefined。 為什么使用“未定義”參數? 因為可能有一些nitwit為全局“未定義”變量分配了一個值...可能是多余的,但是在編寫libs / frameworks / toolkits時,要記住這一點;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM