如何在javascript中访问常量嵌套函数的参数?

时间:2019-09-20 20:17:41

标签: javascript algorithm

在我进行的评估中有人问我这个问题,但无法弄清楚。想知道可能的解决方案。

问题:

  

在指定的行上写一条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)。

2 个答案:

答案 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)时设置局部变量baa调用,在调用时仍为2。因此x为2,因此我们可以得出Math.abs(b)必须为4。 / p>

一种使y成为4的明显方法:

y

(或者,y = 4; y-=4y>>=1y/=2,...等)

答案 1 :(得分:0)

如果您想提供创造性的答案,请尝试:

Math.random = function() { return 1.345; };