提问人:isnvi23h4 提问时间:12/8/2018 最后编辑:Code Maniacisnvi23h4 更新时间:12/9/2018 访问量:1411
函数调用时变量属性的 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 所示?
答:
原始参数(如数字)通过以下方式传递给函数 价值;该值被传递给函数,但如果函数 更改参数的值,则不反映此更改 全局或在调用函数中。
如果传递一个对象(即非原始值,例如 Array 或 用户定义的对象)作为参数,该函数将 对象的属性,该更改在函数外部可见。 来源 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions
好吧,在 javascript 中是传递的,所以当你将一个对象传递给一个函数时,你要传递它不是 .
因此,当您更新函数中的值时,它会在引用时更新值。objects
reference
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
function bar(arg) {
arg = arg + 1;
}
var foo = 1
bar(foo);
console.log(foo);
我想知道每个方法的正确命名约定是什么。
函数没有命名约定(只有当它们直接与对象相关联时,我才会称它们为方法),除了名称是 camelCase。然而,在函数式编程中有一个约定,即返回某些东西的函数是纯的(它们不改变任何东西,而只是返回新的东西,就像你的第一个函数一样),而不返回任何东西的函数是不纯的,它们改变了一些东西。你是否严格遵循这种模式取决于你的编码风格,我经常遵循这种模式,但并非总是如此。在 JS 中也有点难,因为 JS 没有类型化。
还有谁可以解释一下,如何在示例 2 所示的封闭函数操作中更新原始变量值?
这是不可能的。如果你传递一个数字,它就会作为一个值传递,你没有办法找出这个数字属于哪里。这是一件好事,因为您始终可以跟踪哪个函数能够改变对象。 是,不是。bar(foo)
bar(foo.num)
评论