2009-09-23 121 views
37

我理解在流行的JavaScript库(如jQuery和Prototype)中使用(单)美元符号。我也理解PHP中双美元符号的意义(变量变量)。 Dean Edwards在他着名的addEvent() JavaScript函数中使用双美元符号。下面是一个除包含使用双美元符号:JavaScript双美元符号

function addEvent(element, type, handler) { 
    // assign each event handler a unique ID 
    if (!handler.$$guid) handler.$$guid = addEvent.guid++; 
    // create a hash table of event types for the element 
    if (!element.events) element.events = {}; 
    // create a hash table of event handlers for each element/event pair 
    var handlers = element.events[type]; 
    if (!handlers) { 
    handlers = element.events[type] = {}; 
    // store the existing event handler (if there is one) 
    if (element["on" + type]) { 
     handlers[0] = element["on" + type]; 
    } 
    } 
    // store the event handler in the hash table 
    handlers[handler.$$guid] = handler; 
    // assign a global event handler to do all the work 
    element["on" + type] = handleEvent; 
}; 
// a counter used to create unique IDs 
addEvent.guid = 1; 

从我读过,美元符号才正式拥有的JavaScript代码生成工具的意义,虽然该标准在今天很大程度上被忽略了由于美元在前面提到的JavaScript库中有广泛的用途。

任何人都可以在JavaScript中使用双美元符号吗?

非常感谢!

+1

在我看来,这'addEvent'将泄漏就像在IE筛子。 – kangax 2009-09-23 04:32:09

回答

74

我写了这个函数。 :)

$$前缀不再有任何特殊意义。这是我在打包机很受欢迎时使用的标志。 Packer会用这个前缀缩短变量名称。现在Packer会自动缩短变量名称,所以这个表示法是多余的。

简而言之,$符号是JavaScript中的一个有效标识符,因此您只需查看一堆丑陋的变量名称即可。;)

+8

感谢您的权威答案......很高兴听到马的嘴巴,可以这么说! – NewToThis 2009-12-22 16:51:51

3

据我所知,美元符号只是一个可以在变量名中使用的常规字符。这可能是一个公约,表示不应该混淆的财产。

我的猜测是作者使用$$guid来避免与现有属性名称冲突。他可能已经使用__guid或类似的东西。

20

实际上,这只是开发人员的命名约定。出于所有意图和目的,“$$”可能就是“aa”。

正如您所提到的,单个美元符号函数$()已经成为各种JavaScript库中的几乎标准。 “一个统治他们的功能”,呃?但请记住,这并不是JS本身固有的。这只是一个函数名称,它取代了document.getElementById()

所以,这样说,$$可能是任何东西。哎呀,你甚至可以有这样的功能:

function $$$$$$$$(){ 
    //i've got dollar signs in my eyes! 
} 

换句话说,它只是一个变量/函数名,就像所有的休息。

+0

非常感谢您确认没有比这更多的东西! – NewToThis 2009-09-23 15:29:44

6

正如其他人所说,$$是一个任意标识符。

JavaScript工具包MochiKit保留一个与select elements using CSS selector syntax相同的功能,就像jQuery一样,除非不包含特殊对象中的所有匹配元素。

所以,是的 - 没有什么特别的东西,本身。

+6

我很想知道为什么*&@#$ !!人们在这方面投下我的票;如果你打算放弃投票,至少应该提一下,以便提到为什么。 – 2009-11-14 07:24:25

1

双美元符号在以下条款中提到的 -

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

好的。这就是我一直在寻找的......这是在哪里定义的?有没有参考的地方,Mozilla开发者网络的口径? – zipzit 2016-05-28 17:43:57