【问题标题】: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,所以这就是您看到不同结果的原因。这是由于可变范围,并且正在按应有的方式工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-04
        • 2012-11-19
        • 2016-12-05
        • 2023-02-24
        • 2012-03-14
        • 2020-08-06
        • 1970-01-01
        • 2021-07-12
        相关资源
        最近更新 更多