为什么javascript允许$为函数名称?

时间:2011-03-19 13:09:54

标签: javascript programming-languages specifications

我开始喜欢jQuery,但作为PHP开发人员,我讨厌使用

$().stuff

众所周知,PHP中的$标记变量。我猜javascript中的jQuery声明了这样的函数

function $(element) {/*stuff*/}

javascripts是否允许$作为func的名称?这是一个好行为吗?

我知道只有标准[0-9a-zA-Z_]才能成为funcs / vars的名称。

我错过了什么吗?

由于

5 个答案:

答案 0 :(得分:7)

在PHP中使用$是一个彻头彻尾的错误,也是由Perl的发明者做出的。变量前缀在完全成熟的计算机语言中是多余的,因为foobar之类的标识符可以被认为是没有限定条件的变量 - 标识符还能识别什么? :-)问题是发明这些语言的业余爱好者非常熟悉Unix shell,他们显然没有意识到$之类的shell变量引用前面的$PATH不是一个美丽的语言特征,但由于在shell脚本中,单词通常可以“像他们自己”出现这一事实所强加的丑陋必然性,就像你说的那样:

$ echo PATH
PATH
$ echo $PATH
/usr/local/bin:/usr/bin:/bin

换句话说,像shell这样的文本替换语言中需要像$那样说“这是一个变量!”的转义字符,并且转义也很重要就像TCL一样,当然,在现代模板语言中,除了引入动态信息的变量引用和循环之外,你必须能够区分应该复制到网页中的所有普通文本。

但是普通的编程语言通过文本替换工作,所以Perl和PHP中的$是残缺和噪音。

由于$在JavaScript中没有其他用途,因此对于是否将其作为变量的“普通字母”提供是一种简单的美学判断。 JavaScript说“是”,Python说“不”,我已经习惯了两种选择。我想现在对我来说“看起来像JavaScript”,$才有效!

但是在 no 的情况下,你应该让Perl和PHP的可怕选择让你的美学判断得到通知,这是错误的选择!相反,问问自己$是否看起来像资本S,你可以认为它“足够接近一个字母”,或者它是否永远像你的符号。这是真正的选择。

答案 1 :(得分:4)

是的,这是有效的。 Crockford hates it,其他人喜欢它。如果你不喜欢它,不要使用'$',使用'jQuery'。您甚至可以将jQuery放入no conflict mode,以便$永远不会被设置。也就是说,如果你通过PHP编写足够的JS来引起问题,你应该考虑学习如何编写更好,更通用的JS。

答案 2 :(得分:4)

来自MDC docs

  

JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。由于JavaScript区分大小写,因此字母包括字符“A”到“Z”(大写)和字符“a”到“z”(小写)。

我认为这里的关键概念是,在Javascript中,函数是一流的。这意味着它们就像其他一切一样是对象。用于引用函数的名称实际上是变量。

因此,举个例子,你可以这样做:

var myFunc = function() { /* some code */ };

然后将该函数调用为myFunc()

由于$是标识符名称中的有效字符,因此它是函数的有效名称,与包含其他任何内容的变量一样多。

在我看来,在PHP中使用$作为每个变量的sigil是愚蠢的。

答案 3 :(得分:3)

Javascript只允许a-z多于函数名称。 $是函数的有效名称,$在php中没有特殊含义。所以$是函数的正确名称。

答案 4 :(得分:2)

你可以做到

var whatever = $.noConflict();

现在您可以使用whatever(..)代替$(...)

http://api.jquery.com/jQuery.noConflict/

上的文档

并引用Values, Variables, and Literals

  

必须启动JavaScript标识符   用字母,下划线(_)或   美元符号($);后续人物   也可以是数字(0-9)。