JavaScript 在函数调用中将值设置为变量属性

JavaScript setting value to variable properties on a function call

我发现有两种方法可以在函数调用时更新变量 属性 的值

示例 1:

function bar( arg ) {
  return arg + 1;
}

var foo = {
  num: 1
};

foo.num = bar( foo.num );
console.log( foo.num );

示例 2:

function bar( arg ) {
  arg.num = arg.num + 1;
}

var foo = {
  num: 1
};

bar( foo );
console.log( foo.num );

我想知道每个方法调用的正确命名约定是什么。

还有谁能解释一下,如何在示例 2 中所示的封闭函数操作中更新原始变量值?

Primitive parameters (such as a number) are passed to functions by value; the value is passed to the function, but if the function changes the value of the parameter, this change is not reflected globally or in the calling function.

If you pass an object (i.e. a non-primitive value, such as Array or a user-defined object) as a parameter and the function changes the object's properties, that change is visible outside the function. Source : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions

javascript objectsreference 传递,因此当您将对象传递给函数时,您传递的是 memory reference 而不是 copy. 因此,当您在函数中更新值时,它会更新引用处的值。

function bar(arg) {
  arg.num = arg.num + 1;
}

var foo = {
  num: 1
};

bar(foo);
console.log(foo.num);

当您传递 primitive value 时,它会被 value 传递。它传递一个 copy 的值,因此您在 close 函数中所做的任何更改都不会影响原始值。

function bar(arg) {
  arg = arg + 1;
}

var foo = 1

bar(foo);
console.log(foo);

I want to know what are the proper naming convention for each of the methods.

函数没有命名约定(如果它们直接关联到一个对象,我只会称它们为方法),除了这个名字是驼峰式的。然而,函数式编程中有一个约定,函数 return 某些东西是 (它们不会改变任何东西,只是 return 一些新东西,比如你的第一个函数),以及 return 没有什么是 不纯的 的功能,它们改变了一些东西。您是否严格遵循该模式取决于您的编码风格,我经常但并非总是如此。在 JS 中也有点难,因为 JS 没有类型。

also can anyone explain, how it is possible to update the original variable value inside a closed function operation as shown in example 2?

这是不可能的。如果你传递一个数字,它作为一个值传递,你没有办法找出那个数字属于哪里。这是一件好事,因为您始终可以跟踪哪个函数能够改变对象。 bar(foo) 是,bar(foo.num) 不是。