Javascript按值调用并按引用调用

时间:2015-09-24 17:01:18

标签: javascript

我希望这不会是一个重复的帖子。我尝试了所有的帖子,虽然我能够得到我想要的东西,但是我无法理解为什么它会以这种方式工作。

用例:我想从脚本创建一个Javascript嵌套对象。为此,我从其中一个堆栈溢出帖子中找到了以下脚本

var o = {};
  function setByPath(obj,path, value) {
    var parts = path.split('.');
    var o = obj;
    if (parts.length > 1) {
      for (var i = 0; i < parts.length - 1; i++) {
          if (!o[parts[i]])
              o[parts[i]] = {};
          o = o[parts[i]];
      }
    }

    o[parts[parts.length - 1]] = value;
}

setByPath(o,"path.path2.path","kunjdab");
console.log(o);

第一个的输出是:

o[path][path2][path] = "kunjdab"

然后我试着修改它只是为了学习这个,并尝试了这个:

      function setByPath(path, value) {
        var parts = path.split('.');
        var o = {}
        if (parts.length > 1) {
          for (var i = 0; i < parts.length - 1; i++) {
              if (!o[parts[i]])
                  o[parts[i]] = {};
              o = o[parts[i]];
          }
        }

        o[parts[parts.length - 1]] = value;
        return o
    }

var o =  setByPath("path.path2.path","kunjdab");
console.log(o);

第二个o[path] = "kunjdab"

的输出

第一个片段工作得很好,但第二个片段没有。我不确定为什么。有人能帮助我吗?

我做了,通过引用读取Javascript调用和按值调用。在第一种情况下,o的引用将作为值传递给函数。但我仍然无法理解为什么第一个有效,第二个没有。

0 个答案:

没有答案