良木 发表于 2020-9-11 22:35:31

关于引用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="text/JavaScript">
      var a = 0;
      var b = 0;
      function show() {
      b = 1;
      }
      alert(b);
      show(0);
      alert(b);
    </script>
</head>
<body></body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script type="text/JavaScript">
      var a = 0;
      var b = 0;
      function show(b) {
      b = 1;
      }
      alert(b);
      show(0);
      alert(b);
    </script>
</head>
<body></body>
</html>

代码如上


第一个的alert是 0 /1
第二个的alert是 0 /0
第二个可否理解成为 function里的b全部代换成了0
即 function show(0) {
      0 = 1;
      }
所以对第二个的第二个alert 无影响

kogawananari 发表于 2020-9-11 22:44:52

第二个里面function里有b了(就是你传进来的参数) 就不往花括号外层去找了
而第一个 function里面要对b赋值的时候发现没b 就去外面找b了

kogawananari 发表于 2020-9-11 22:50:16

本帖最后由 kogawananari 于 2020-9-11 22:53 编辑

但是你现在b是值类型 b是引用类型的时候就会又不一样
<script>
      function show(b) {
      b = 1;
      }
      let a =
      alert(a)//
      show(a)
      alert(a)//
</script>
形参相当于在函数内直接赋值的变量,不会影响原实参
当参数是复杂对象的时候,赋值相当于别名。此时函数会影响原实参

良木 发表于 2020-9-11 23:04:21

kogawananari 发表于 2020-9-11 22:50
但是你现在b是值类型 b是引用类型的时候就会又不一样

形参相当于在函数内直接赋值的变量,不会影响原实 ...

这个也能想成是
function show(b) {
      b = 1;
      }中的b 全部替换为a
function show(a) {
      a = 1;
      }
然后改变a数组啊
页: [1]
查看完整版本: 关于引用