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

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

  • 相关阅读:
    IOS中多版本,多设备类型支持注意事项
    runtime
    网络搜集各种iOS开源类库
    Foudation框架常用结构体和常用类
    iOS开发-正则表达式的使用方法
    Github上的iOS资料-个人记录
    iOS应用程序多语言本地化
    星期判断
    【设定本地通知为周一到周五提醒, 周末不提醒解决办法】
    iOS9 HTTPS解决办法
  • 原文地址:https://www.cnblogs.com/haohaoday/p/4634794.html
Copyright © 2011-2022 走看看