看一些高手写代码单独用 “$”和“_” 来表示变量,什么时候单独使用这两个字符?

看一些高手写代码单独用 “$”和“_” 来表示变量,什么时候单独使用这两个字符?
还有没有其他的一些小白不容易理解的习惯呢?

阅读 4.5k
10 个回答

这个虽然没有强制性规定,但是一般对于很多框架而言,_开头的字符串用于定义内部私有属性和方法,$开头的字符串给外部暴露属性或方法,类如vue是这样的。

另外对于一些框架为了书写方便且一般不会冲突,会使用_$作为命名空间或者属性方法:
_underscorejslodash__proto__(原型内部属性)等。
$jQueryzepto、$$(选择器)、正则$1-$9等。

clipboard.png

一般_为前缀的约定为私有变量, 非强制的;
$一般为jQuery的别名, 在jQuery插件和基于jQuery的插件中经常被使用

_ 表示没什么特别的意义。 比如在数组 map forEach 这样的函数里

var goAhead = arr => arr.map(
    // map 的第一个参数是函数  
    (_, idx, its) => {
        return its[idx + 1] || its[0]; 
    }
);

clipboard.png

这里表示函数体用不上第一个参数 或者说第一个参数不重要 但是如果要用到 its 就不能省略中间的 _

或者有些更懒的。。。

setTimeout(_ => {
    console.log('。。。括号都懒掉了'); 
}, 200);

还有,一些JS函数式编程库就用 _ 来组织各种函数式工具 比如 _.forEach _.map

这里的 _ 没什么特别的意思,关键在于 . 后面的内容。


Haskell 经常用 _ 来指代一些不重要的函数参数 (但是为了模式匹配又不得不写的)


至于 $ 一般指 jQuery 或 Zepto 这种 DOM 库,约定俗成,大家一看便知这是 jQuery ,写起来也爽


很多人也提到了以下划线开头的变量,我来扯一句。

node__dirname 表示执行的js所在目录,可为什么要加下划线地这样命名?
因为 dirname 是个很常见的变量名 如果不加前缀,那么很可能会跟某些人写的代码冲突,而加上前缀 __ 那么他就是另外一个命名空间下的变量了 ( {x是变量名 | x 满足 "__*" } )

这样就不会干涉到普通的 dirname 这个可能的变量名了。

因为方便,且不容易冲突。
当然,自从 jQuery 出现以后,也有一些类库使用 $ 作为变量名。
$_ 都少用不易冲突,而且符合变量命名的规范,简短,所以被用了作为一些类库的变量命名。
_ 开头接其他字母,例如 _this 表示是改方法私有,外界不能访问。

$是jquery
_是underscore

另外_开头有个约定,表示不使用的变量

因为短!

var asdfasdfawdfsakdfaskjf
var $

还是$敲着省事儿

如果你要写类库,那么在使用时,外部入口就越简单越好!

就好像大伙用jquery时,用$的比用jQuery的多!

先说说_
当你必须要用一个变量获取一个值,而这个变量又不会被后文引用到的时候(因为_做变量没有任何意义)

比如,

fn = () => [1, 2]

// fn是一个函数,返回两个数
// 假如我只对第二个数感兴趣,则可以用变量_来存放第一个数
[_, a] = fn()
// 现在_ = 1, a = 2

至于$则是在jquery里面用得比较多,用来代替jQuery,让你敲得方便一点

没有特别的的要求
个人习惯而已
你想怎么写就怎么写

我也谈谈我的看法:-和_
在css中,很经常见的是用text-info这样,使用破折号连接两个英文的,但是在一些场景,例如vue,有时候使用-会给你报错,所以听一些大神的意见,现在我使用_

新手上路,请多包涵

或许单独用和Go的_有关系(也有可能Go是因为这个传统才), Go的_就代表这个变量不赋值, 因为Go可以有多个返回值, 以及有时候单独返回一个err, 可以用_去忽视返回值. 那这个多个返回值的操作在JS里其实被一些库通过解构赋值来实现, 相应的似乎也会有_来表示不要的操作?

推荐问题
宣传栏