【问题标题】:The answer should return 4. idk how arguments[0] is returning 3 as its value and foo(3) is returning 6答案应该返回 4。我知道 arguments[0] 是如何返回 3 作为它的值而 foo(3) 是如何返回 6 的
【发布时间】:2022-12-06 02:12:02
【问题描述】:
var arguments = [1,2,3];
var arr=()=>arguments[0];
console.log(arr()); //returns 1
function foo(n){
console.log(arguments[0]); //returns 3 should have returned 1 as arguments[0] is 1
var f=()=>arguments[0]+n;
return f();
}
console.log(foo(3)); //returns 6
以上是一段JavaScript代码
我已经尝试执行代码,我猜答案是正确的,但我无法理解 arguments[0] 如何返回 3 而不是 1。
【问题讨论】:
标签:
javascript
arrays
function
console.log
【解决方案1】:
在 JavaScript 中,arguments 对象是一个局部变量,在每个函数中都可用。它是一个类似数组的对象,包含传递给函数的参数。在您的代码中,foo 函数中的 arguments[0] 指的是传递给 foo 的第一个参数,即 3。
var arr = (...args) => args[0];
console.log(arr(1, 2, 3)); // returns 1
function foo(n, ...args) {
console.log(args[0]); // returns 1
var f = (...innerArgs) => innerArgs[0] + n;
return f(args[0]);
}
console.log(foo(3, 1, 2, 3)); // returns 4
在这个更新的代码中,我使用了剩余参数语法 (...args) 来捕获传递给 arr 和 foo 的参数作为数组。这允许我们使用 args[0] 而不是 arguments 对象来访问传递给这些函数的第一个参数。我还在 foo 中使用了 rest 参数语法来捕获作为数组传递给 f 的参数。这允许我们使用 innerArgs[0] 而不是 arguments 对象来访问传递给 f 的第一个参数。
【解决方案2】:
您看到的是 foo(3) arguments[0] 是 3,然后您将 n (3) 添加到它并得到 6。全局 arguments[0] 等于 1,所以这就是您看到不同结果的原因。这是由于可变范围,并且正在按应有的方式工作。