在我进行的评估中有人问我这个问题,但无法弄清楚。想知道可能的解决方案。
在指定的行上写一条Javascript语句,使打印的数字始终在10到20之间。
let x = 2; let y = 8; const a = function(b) { return function(c) { return x + y + Math.abs(b) + c; }; }; // Statement will go here const fn = a(x); x = 4; console.log(fn(Math.random() * 10));
我尝试为变量y
分配不同的值。但是我认为罪魁祸首是要知道嵌套函数中将包含什么变量c
。请注意,c
始终是0到10之间的数字(因为Math.random()
介于0到1之间,然后乘以10)。
答案 0 :(得分:0)
您已经正确地得出结论,传递给fn
的参数是一个介于0到10之间的随机数,在对c
的调用将评估的表达式中为fn
:{{ 1}}
因此,如果x + y + Math.abs(b) + c
必须返回10到20之间的数字,那么fn
必须等于10。
我们还看到,全局变量x + y + Math.abs(b)
一次被设置为4,我们无法再对其进行更改,但是仍在调用x
之前,因此意味着fn
必须等于6。
现在,这已经给了我们一个提示:按目前的情况,y + Math.abs(b)
是8,这使得上一段中的结论不可能。因此,我们必须更改y
。还不算太晚,因为只有在调用y
时才会读取y
的值。
那么fn
是什么?调用Math.abs(b)
时设置局部变量b
。 a
用a
调用,在调用时仍为2。因此x
为2,因此我们可以得出Math.abs(b)
必须为4。 / p>
一种使y
成为4的明显方法:
y
(或者,y = 4;
,y-=4
,y>>=1
,y/=2
,...等)
答案 1 :(得分:0)
如果您想提供创造性的答案,请尝试:
Math.random = function() { return 1.345; };