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

为什么javascript允许函数名为$?,javascript,programming-languages,specifications,Javascript,Programming Languages,Specifications,我开始喜欢jQuery,但作为PHP开发人员,我讨厌使用它 $().stuff 众所周知,PHP中的$标记变量。我猜javascript中的jQuery声明了这样一个函数 function$(element){/*stuff*/} javascripts是否允许$作为func的名称?这是一种良好的行为吗 我知道只有standard[0-9a-zA-Z_]可以是funcs/vars的名称 我错过什么了吗 谢谢是的,它是有效的,其他人喜欢它。如果您不喜欢它,请不要使用“$”,而是使用“jQuery

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

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

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

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

我知道只有standard
[0-9a-zA-Z_]
可以是funcs/vars的名称

我错过什么了吗


谢谢

是的,它是有效的,其他人喜欢它。如果您不喜欢它,请不要使用“$”,而是使用“jQuery”。您甚至可以将jQuery放入到中,这样就永远不会设置$。也就是说,如果你通过PHP编写足够的JS,这会给你带来问题,你应该考虑如何编写更好、更通用的JS。是函数的有效名称,$没有像php中那样的特殊含义。因此,$是函数的正确名称。

来自:

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

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

例如,您可以这样做:

var myFunc = function() { /* some code */ };
然后将函数调用为
myFunc()

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

在我看来,在PHP中使用
$
作为for every变量是愚蠢的。

你可以这样做

var whatever = $.noConflict();
现在您可以使用
任何(…)
而不是
$(…)

文件在


引用

JavaScript标识符必须启动 带字母、下划线(389;)或 美元符号(元),;后继字符 也可以是数字(0-9)


在PHP中使用
$
是一个彻头彻尾的错误,Perl的发明者也犯了这个错误。在一种成熟的计算机语言中,变量前缀是多余的,因为像
foo
bar
这样的标识符可以被假定为没有限定条件的变量-标识符还能识别什么?:-)问题是,发明这些语言的业余爱好者非常熟悉Unix shell,他们显然没有意识到在shell变量引用前面的
$
,比如
$PATH
,不是一个漂亮的语言特性,而是一个丑陋的必要性,因为在shell脚本中,词语通常会以“自身”的形式出现,如您所说:

$ echo PATH
PATH
$ echo $PATH
/usr/local/bin:/usr/bin:/bin
换句话说,在shell这样的文本替换语言中,像
$
这样表示“这是一个变量!”的转义字符是必需的,而转义在TCL之类的语言中也很重要,当然,在现代模板语言中,在这里,您必须能够区分所有应该复制到web页面中的普通文本,以及拉入动态信息的变量引用和循环

但是普通的编程语言不能通过文本替换来工作,因此Perl和PHP中的
$
是粗俗的

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


但是在任何情况下,您都不应该让您的审美判断被可怕的Perl和PHP选择所影响,这是错误的选择!取而代之的是,问问自己<代码> $< /代码>看起来是否足够像一个Capital <代码>代码>,你可以认为它“足够接近一个字母”,或者它看起来永远像你的一个符号。这才是真正的选择。

我确实使用jQuery,但每次键入jQuery都不好玩,@yes123:可以随意使用:
var foo=jQuery.noConflict()
或者如果使用
ready
函数或其快捷方式,则可以将所需的符号作为参数:
jQuery(函数(foo){foo(“div”).css(“颜色”、“红色”);}更多:@jaalude我在编写php+js时没有任何问题,它只是一些与“习惯”相关的东西,感谢您添加关于noConflict返回值的内容。我忘了提它,这对情况很有帮助。@yes123,你有一些糟糕的堆栈溢出方式。不要仅仅因为你不喜欢别人的意见就投票给他们完全正确的答案。意见不是答案,而是关于这件事的一些附加对话。我怎样才能提出这个问题?没有什么比检查规范更重要的了:(第7.6节)。标识符可以由一个或多个任意unicode字符组成,具体包括
$
\
@yes123:“如何使此问题连续化”如果单击“编辑”,问题框下可能会有一个“Community Wiki”复选框。如果有,请勾选它并单击“保存编辑”。如果没有,那么你还没有足够的rep来在事后将它变成CW(当你最初问这个问题时,你可以这样做)。@t.J.Crowder它实际上不是任何unicode字符;这里(显然)有一个Unicode“标识符”的概念,这就是Javascript所遵循的,所以标识符可以有各种疯狂的东西,但不能有空格或逗号等…@crow:好的,我会坚持正常的问题-1不是头晕目眩的,这很好,特别是当你做这样的事情时
“name的值是{$name}”
例如,+1个好的电话,张贴MDC文档并链接它们!:)我同意PHP在使用$时是愚蠢的。