zoukankan      html  css  js  c++  java
  • 一道关于引用传递和值传递的JS题

     先看题1

    var obj = {name:"a"}
    function bar(obj) {
        console.log(obj.name);
        obj = {name:"b"};
        console.log(obj.name)
    }
    console.log(bar(obj))
    console.log(obj.name)

    在chrome控制台执行以下看看,发现依次打印

    a
    b
    a
    函数体内重新赋值了,新开辟了内存区域,跟外面的引用类型无关了。

    题2,稍微有点变化

    var obj = {name:"a"}
    function bar(obj) {
        console.log(obj.name);
        obj.name = "b";
        console.log(obj.name)
    }
    console.log(bar(obj))
    console.log(obj.name)

    在chrome控制台执行以下看看,发现依次打印

    a
    b
    b
    引用类型值发生改变了

    题3,再稍微变化一下

    var obj = {name:"a"}
    function bar(obj) {
        console.log(obj.name);
        var obj = {name:"b"};
        console.log(obj.name)
    }
    console.log(bar(obj))
    console.log(obj.name)

    在chrome控制台执行以下看看,发现依次打印

    a
    b
    a

    题4,继续变化

    var obj = "name"
    function bar(obj) {
        console.log(obj);
        var obj = "age";
        console.log(obj)
    }
    console.log(bar(obj))
    console.log(obj)

    发现以此打印

    name
    age
    name

    题5,继续变化

    var obj = "name"
    function bar() {
        console.log(obj);
        var obj = "age";
        console.log(obj)
    }
    console.log(bar(obj))
    console.log(obj)

    发现依次打印

    undefined
    age
    name

    题6,还是继续变化

    var obj = "name"
    function bar() {
        console.log(obj);
         obj = "age";
        console.log(obj)
    }
    console.log(bar(obj))
    console.log(obj)

    瞧瞧这次又会打印啥

    name
    age
    age

    如果你都答对了,说明 你理解了引用传递和值传递 ,理解了局部变量和全局变量,如果你答错了,好好想想估计也就想通了

  • 相关阅读:
    C# WinForm dataGridView 技巧小结
    Win7设置局域网共享
    vs2010快捷键大全
    C# WebBrowser.DocumentCompleted 多次调用解决方法
    为应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制
    VB高清图标制作方法
    sqlite 中文排序
    一个vbs文件将指定文件夹下的文件名输出到指定文件夹下
    用DOS命令获取文件列表
    文件搜索神器 Everything
  • 原文地址:https://www.cnblogs.com/haohaoday/p/4634794.html
Copyright © 2011-2022 走看看