Javascript 用递增的值调用函数

Javascript 用递增的值调用函数,javascript,function,execution,increment,Javascript,Function,Execution,Increment,如果我调用这样的函数: var n = 0; f(n, n += 100) 它的参数值是0和100,而不是我预期的100和100。这种行为符合我目前在程序中的需要,但我不明白为什么它会以这种方式工作,这让我很烦恼 有人能解释为什么会这样,以及这样传递参数是否安全吗?第一个参数值在第二个参数值之前进行计算。变量n是JavaScript中的基本类型(基本类型包括数字、字符串和布尔值)。原语类型按值传递,解释您观察到的行为。如果n是非基元类型,它将通过引用传递,对它所做的任何修改都将反映在对n的所有

如果我调用这样的函数:

var n = 0; f(n, n += 100)
它的参数值是0和100,而不是我预期的100和100。这种行为符合我目前在程序中的需要,但我不明白为什么它会以这种方式工作,这让我很烦恼


有人能解释为什么会这样,以及这样传递参数是否安全吗?

第一个参数值在第二个参数值之前进行计算。

变量
n
是JavaScript中的基本类型(基本类型包括数字、字符串和布尔值)。原语类型按值传递,解释您观察到的行为。如果
n
是非基元类型,它将通过引用传递,对它所做的任何修改都将反映在对
n
的所有引用中

有关更多信息,请参阅。

与C(和Java一样)不同,Javascript实际上有一个定义的参数求值顺序:从左到右。因此,有点令人惊讶的是,按照现有方式编写代码是安全的。然而,我认为它的风格很差,事实上几乎是不可读的,因为没有很多人知道他们的头脑中的评估顺序是否已经被定义了(例如:我必须看它来回答这个问题)。
编辑:参见第11.2.4节

函数调用参数列表中的赋值?呃,我宁愿避免。。。