将对象作为参数传递时的 Javascript 函数作用域

Javascript function scope when passing object as a parameter

本文关键字:Javascript 函数 作用域 参数传递 对象      更新时间:2023-09-26

嗨,我有以下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 函数中传递对象是否总是作为对原始对象本身的引用传递?

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

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

换句话说,这与变量范围无关,而是与变量实际引用的内容有关。