将对象作为参数传递时的Javascript函数范围

时间:2016-04-25 20:22:37

标签: javascript

您好我有以下javascript代码

var skyrimCity = function(object) {
    object = {
      'world': 'whiterun'
    };
  },
  skyrim = function(object) {
    object.world = 'skyrim';
  },

  elderScrolls = {
    'world': 'tamriel'
  };
console.log(elderScrolls); // printed value ? -> {world: "tamriel"}

skyrimCity(elderScrolls);
console.log(elderScrolls); // printed value ? -> {world: "tamriel"}

skyrim(elderScrolls);
console.log(elderScrolls); // printed value ? -> {world: "skyrim"}

里面的天际功能我改变了世界的价值,但我也能在功能之外看到它。我想知道为什么这个变化的范围在函数之外传播?传递一个javascript函数内的对象总是作为对原始对象本身的引用传递?

1 个答案:

答案 0 :(得分:3)

  

在javascript函数中传递一个对象是否总是作为对原始对象本身的引用传递?

是的,差不多。在JavaScript中,任何不是基本类型(数字,布尔值,字符串)的东西都是引用类型。如果将对象传递给函数,则传递对原始对象的引用。如果在函数内修改了该对象,则会修改原始对象。

换句话说,这与变量范围无关,而是变量实际指的是什么。