Javascript 运算符优先级和与Math.Floor(Math.Random())的关联性
从代码给出的结果来看,我理解代码是如何工作的。首先,它得到一个随机数,然后,使用Math.floor()对Math.random的结果进行取整。因此,它在代码中从右向左移动Javascript 运算符优先级和与Math.Floor(Math.Random())的关联性,javascript,Javascript,从代码给出的结果来看,我理解代码是如何工作的。首先,它得到一个随机数,然后,使用Math.floor()对Math.random的结果进行取整。因此,它在代码中从右向左移动 Math.floor(Math.Random * num); 在此处的JavaScript引用中,如下图所示 它说,对于点和圆括号,关联性是“从左到右”。但是,根据我上面摘录的代码,我会说它是“从右到左”。请解释一下,如果不解析函数的参数,就不能调用函数。这不是运算符优先级的问题(而是执行顺序)。函数调用为左关联的原因是
Math.floor(Math.Random * num);
在此处的JavaScript引用中,如下图所示
它说,对于点和圆括号,关联性是“从左到右”。但是,根据我上面摘录的代码,我会说它是“从右到左”。请解释一下,如果不解析函数的参数,就不能调用函数。这不是运算符优先级的问题(而是执行顺序)。函数调用为左关联的原因是为了使以下调用正常工作:
foo.bar.baz()
当运算符为左关联时,这等于
((foo.bar).baz)()
这等于原始代码。如果是正确的,您将得到以下结果:
foo.(bar.(baz())
这显然会做一些完全不同的事情,很可能根本不起作用
顺便说一下,函数调用的优先级与成员运算符的优先级不同。有关此主题的参考资料,请参阅,以获得比您在问题中链接的更好的参考资料。函数在未解析其参数的情况下无法调用。这不是运算符优先级的问题(而是执行顺序)。函数调用为左关联的原因是为了使以下调用正常工作:
foo.bar.baz()
当运算符为左关联时,这等于
((foo.bar).baz)()
这等于原始代码。如果是正确的,您将得到以下结果:
foo.(bar.(baz())
这显然会做一些完全不同的事情,很可能根本不起作用
顺便说一下,函数调用的优先级与成员运算符的优先级不同。有关此主题的参考信息,请参阅,以获得比您在问题中链接的主题更好的参考信息。与它们的执行顺序无关,但与它们的解析方式无关
关联性“从左到右”表示a.b.c==(a.b.c!==a、 (b.c)
当您进行函数调用时,当然会首先计算参数(至少在JS这样的非惰性语言中是如此)——这也是在中定义的
这里发生的是:
Math.floor(Math.Random*num)根据运算符优先级和关联性规则,代码>被解析为:
- 评估时,它是自上而下的。调用首先评估其函数,在
和Math
上调用成员操作符。当它计算为有效函数时,它将继续计算参数。乘法将首先获取其左操作数,从floor
和Math
上的成员运算符获取未定义的操作数;然后它获取变量Random
的值。这将导致num
,现在将使用它调用floor函数,再次返回NaN
NaN
- 与它们的执行顺序无关,但与它们的解析方式无关
关联性“从左到右”表示
a.b.c==(a.b.c!==a、 (b.c)
当您进行函数调用时,当然会首先计算参数(至少在JS这样的非惰性语言中是如此)——这也是在中定义的
这里发生的是:
Math.floor(Math.Random*num)根据运算符优先级和关联性规则,代码>被解析为:
- 评估时,它是自上而下的。调用首先评估其函数,在
和Math
上调用成员操作符。当它计算为有效函数时,它将继续计算参数。乘法将首先获取其左操作数,从floor
和Math
上的成员运算符获取未定义的操作数;然后它获取变量Random
的值。这将导致num
,现在将使用它调用floor函数,再次返回NaN
NaN
Math.(floor(num))
带有错误“floor is undefined”关联性!=从右到左的执行顺序表示:Math.(floor(num))
错误为“floor未定义”