一道JS题,请解答--在外定义变量,函数收参,函数内改变变量

为何 第一个console.log的输出是abc啊?


let data = "abc";
      fun(data);
      console.log(data);

      function fun(data) {
        // console.log("data", data);
        // console.log("arg", arguments);
        data += "xyz";
        // console.log("data1", data);
      }

      // console.log(data);

因为函数参数是基于值传递的,所以在函数外部data参数的值不会受到函数内部的改变,所以第一个console.log的输出仍然是"abc"。

该回答引用ChatGPT

在这段代码中,第一个console.log输出的是"abc",因为在调用fun函数之前,data被赋值为"abc"。然后,fun函数被调用,它的参数是data,也就是"abc"。在fun函数内部,将data与字符串"xyz"连接起来,产生一个新的字符串"abcxyz"。然而,这并没有改变原始的data变量,因为在JavaScript中,字符串是不可变的。因此,当fun函数执行完毕后,data仍然是"abc"。所以,当第二个console.log被调用时,输出的值仍然是"abc"。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^