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

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

  • 相关阅读:
    分布式机器学习:算法、理论与实践——【1】
    LLVM Cookbook
    【前端】Webpack 进阶
    Noip2015 运输计划 树上差分 二分答案
    bzoj 2259: [Oibh]新型计算机 最短路 建模
    888E
    [ZJOI2012]旅游 对偶图 树的直径
    [HAOI2007]理想的正方形 单调队列 暴力
    bzoj1457: 棋盘游戏 SG函数 Nim
    Bomb HDU
  • 原文地址:https://www.cnblogs.com/haohaoday/p/4634794.html
Copyright © 2011-2022 走看看