鱼C论坛

 找回密码
 立即注册
查看: 2713|回复: 3

[已解决]关于引用

[复制链接]
发表于 2020-9-11 22:35:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
<!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 无影响

最佳答案
2020-9-11 22:50:16
本帖最后由 kogawananari 于 2020-9-11 22:53 编辑

但是你现在b是值类型 b是引用类型的时候就会又不一样
<script>
      function show(b) {
        b[0] = 1;
      }
      let a = [0]
      alert(a)//[0]
      show(a)
      alert(a)//[1]
</script>
形参相当于在函数内直接赋值的变量,不会影响原实参
当参数是复杂对象的时候,赋值相当于别名。此时函数会影响原实参
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-11 22:44:52 | 显示全部楼层

回帖奖励 +1 鱼币

第二个里面function里有b了(就是你传进来的参数) 就不往花括号外层去找了
而第一个 function里面要对b赋值的时候发现没b 就去外面找b了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-11 22:50:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 kogawananari 于 2020-9-11 22:53 编辑

但是你现在b是值类型 b是引用类型的时候就会又不一样
<script>
      function show(b) {
        b[0] = 1;
      }
      let a = [0]
      alert(a)//[0]
      show(a)
      alert(a)//[1]
</script>
形参相当于在函数内直接赋值的变量,不会影响原实参
当参数是复杂对象的时候,赋值相当于别名。此时函数会影响原实参
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-11 23:04:21 | 显示全部楼层
kogawananari 发表于 2020-9-11 22:50
但是你现在b是值类型 b是引用类型的时候就会又不一样

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

这个也能想成是
function show(b) {
        b[0] = 1;
      }中的b 全部替换为a
function show(a) {
        a[0] = 1;
      }
然后改变a数组啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 15:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表