[英]How to access a constant nested function's parameter in javascript?
我在進行的評估中被問到這個問題,但無法弄清楚。 想知道可能的解決方案。
在指示的行上寫一條 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
分配不同的值。 但我認為罪魁禍首是要知道嵌套的 function 中的變量c
是什么。 請注意, c
始終是介於 0 和 10 之間的數字(因為Math.random()
介於 0 和 1 之間,然后乘以 10)。
您已經正確得出結論,傳遞給fn
的參數是 0 到 10 之間的隨機數,即調用fn
將計算的表達式中的c
: x + y + Math.abs(b) + c
因此,如果fn
必須返回 10 到 20 之間的數字,則x + y + Math.abs(b)
必須等於 10。
我們還看到全局變量x
一次設置為 4,我們無法再更改它,但仍然在調用fn
之前,因此這意味着y + Math.abs(b)
必須等於 6。
現在這已經給了我們一個提示:就目前而言, y
是 8,這使得上一段中的結論是不可能的。 所以我們必須改變y
。 現在還為時不晚,因為只有在調用fn
時才會讀取y
的值。
那么什么是Math.abs(b)
? 調用a
時設置局部變量b
。 a
用x
調用,在調用時它仍然是 2。所以Math.abs(b)
是 2,所以我們可以推導出y
必須是 4。
一種使y
在一行中變為 4 的明顯方法:
y = 4;
(或者, y-=4
, y>>=1
, y/=2
, y^=12
,...等)
如果您想提供有創意的答案,請嘗試:
Math.random = function() { return 1.345; };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.