So heres my code,how are variables being updated as it is not working.What am i doing here?
var myNum = 0;
function upVar(eletoup)
{
this.eletoup = eletoup;
this.updateValue=function updateValue(newValue) {
this.eletoup += newValue;
}}
upVar(myNum).updateValue(1000);
console.log(myNum)
Any help would be appreciated
答案 0 :(得分:1)
JavaScript是按值传递的。这意味着当你这样做时:
upVar(myNum).updateValue(1000);
upVar
收到myNum
当时包含的值,而不是对myNum
的某种引用。 upVar
没有任何内容可以对它在(eletoup
)中接收到的值的参数进行处理,该值将更改upVar
变量的值。他们之间完全没有联系。
相反,通常要做的是拥有一个需要提供更新值 return 值的函数,并让调用从函数接收更新。更简单的例子:
function updateValue(value, update) {
return value + update;
}
var myNum = 0;
myNum = updateValue(myNum, 1000);
console.log(myNum);
myNum = updateValue(myNum, 1000);
console.log(myNum);
但您似乎想要在代码中使用对象。请注意,this
按照您的方式调用upVar
时收到的值将是默认 this
值。在“松散”(又名“草率”)模式中,该默认值是对全局对象的引用(在浏览器上也可用作window
)。在“严格”模式下,它是undefined
。
您当然可以创建一个对象,从myNum
初始化该对象,然后更新该属性。这是一种方法:
function upVar(initialValue) {
return {
value: initialValue,
updateValue: function(update) {
this.value += update;
}
};
}
var myNum = 0;
var obj = upVar(myNum);
obj.updateValue(1000);
console.log("obj.value", obj.value);
obj.updateValue(1000);
console.log("obj.value", obj.value);
// Note that myNum isn't changed
console.log("myNum", myNum);
在某些情况下,函数可以通过接收参数来更新变量而不是,但是因为它们关闭变量。这些功能称为“闭包”。
我建议您完成一些基本的JavaScript教程和/或一本可靠的“Beginning JavaScript”一书,以便为该语言的工作方式奠定良好的基础。