JavaScript高级学习笔记:相关问题1

发布于:2022-11-29 ⋅ 阅读:(245) ⋅ 点赞:(0)

问题: var a = xxx, a内存中到底保存的是什么?

xxx为基本数据,a保存的就是这个数据

  xxxx是对象,保存的是对象的地址值

  xxx是一个变量,保存的xxx的内存内容(可能是基本数据,也可能是地址值)

<script type="text/javascript">
  var a=3;
  a=function(){

  }
  var b='abc'
  a=b;//abc
  b={}
  a=b//地址值
</script>

关于引用变量赋值问题?

2个引用对象指向同一个对象,通过一个变量修改对象内部数据,另一个变量看到的是修改之后的数据

var obj1={name:'tom'}
  var obj2=obj1//将obj1的内容保存给obj2,只不过obj1内容为地址值
  obj1.name='jack'
  console.log(obj2.name)//'jack'

 var obj1={name:'tom'}

  var obj2=obj1//将obj1的内容保存给obj2,只不过obj1内容为地址值

  obj1.name='jack'

  console.log(obj2.name)//'jack'

  function fn (obj){

    obj.name='Bob'

  }

  fn(obj1)

  console.log(obj2.name)

请问是Bob还是tom?

Bob

  fn(obj1)中的obj1是实参

  function fn (obj){

    obj.name='Bob'

  }中的obj是形参

实参赋值给形参,就是相当于把内部数据赋值给obj,只不过是地址值

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02_关于引用变量赋值问题</title>
</head>
<body>
<!--
关于引用变量赋值问题
  n个引用对象指向同一个对象,通过一个变量修改对象内部数据,其他所有变量看到的是修改之后的数据
-->
<script type="text/javascript">
  var obj1={name:'tom'}
  var obj2=obj1//将obj1的内容保存给obj2,只不过obj1内容为地址值
  obj1.name='jack'
  console.log(obj2.name)//'jack'
  function fn (obj){
    obj.name='Bob'
  }
  fn(obj1)
  console.log(obj2.name)//Bob
</script>
</body>
</html>

var a={age:12}

  var b=a

  a={name:'bob'}

  console.log(b.age)

请问b是什么值

在没有进行第24行时,a和b都指向同一个地址值的堆中,但27行的a={name:'bob'},这时,a指向先前的地址连接改变了,重新指向了name这块地址,而b还是不变

2个引用对象指向同一个对象,让其中一个引用对象指向另一个对象,另一引用变量依然指向前一个变量 

var a={age:12}

  var b=a

  a={name:'bob',age:18}

  b.age=14

  // b=a

  console.log(b.name,a.name,a.age)//12 bob 18

  function fn2(obj){

    obj={age:15}

  }

  fn2(a)

  console.log(a.age)

请问a.age的值为什么

age=18

这里obj中传入的是实参a的地址值,但是obj在函数中重新被赋值了一个地址值,和a没有关系了

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>02_关于引用变量赋值问题</title>
</head>
<body>
<!--
关于引用变量赋值问题
  n个引用对象指向同一个对象,通过一个变量修改对象内部数据,其他所有变量看到的是修改之后的数据
  2个引用对象指向同一个对象,让其中一个引用对象指向另一个对象,另一引用变量依然指向前一个变量
-->
<script type="text/javascript">
  var obj1={name:'tom'}
  var obj2=obj1//将obj1的内容保存给obj2,只不过obj1内容为地址值
  obj1.name='jack'
  console.log(obj2.name)//'jack'
  function fn (obj){
    obj.name='Bob'
  }
  fn(obj1)
  console.log(obj2.name)//Bob
  var a={age:12}
  var b=a
  a={name:'bob',age:18}
  b.age=14
  // b=a
  console.log(b.name,a.name,a.age)//12 bob 18
  function fn2(obj){
    obj={age:15}
  }
  fn2(a)
  console.log(a.age)//
</script>
</body>
</html>

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到