【问题标题】:how do i update variables using functions如何使用函数更新变量
【发布时间】:2018-01-21 11:41:21
【问题描述】:

所以这是我的代码,如何更新变量,因为它不起作用。我在这里做什么?

var myNum = 0;

function upVar(eletoup) 
{

    this.eletoup = eletoup;

    this.updateValue=function updateValue(newValue) {
        this.eletoup += newValue;
    }}

upVar(myNum).updateValue(1000);

console.log(myNum)

任何帮助将不胜感激

【问题讨论】:

  • 抱歉,我不知道它是如何工作的..
  • 这是整个代码吗?
  • 是的,它是......它不会工作
  • 你能说出你想要得到什么结果吗?
  • 上面有几个相当基本的问题。我建议您从当前的工作中退后一步,阅读一些基本的 JavaScript 教程和/或一本可靠的“JavaScript 入门”书籍。

标签: javascript node.js


【解决方案1】:

JavaScript 是按值传递的。这意味着当你这样做时:

upVar(myNum).updateValue(1000);

upVar 接收到myNum 在那一刻包含的,而不是对myNum 的某种引用。 upVar 无法处理它在 (eletoup) 中接收该值的参数,这将更改 upVar 变量的值。它们之间根本没有任何联系。

相反,通常的做法是有一个需要提供更新值的函数返回该值,并让调用从该函数接收更新。更简单的例子:

function updateValue(value, update) {
    return value + update;
}
var myNum = 0;
myNum = updateValue(myNum, 1000);
console.log(myNum);
myNum = updateValue(myNum, 1000);
console.log(myNum);

不过,您似乎想在代码中使用对象。请注意,upVar 收到的 this 值将是 默认 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 教程和/或一本扎实的“JavaScript 入门”一书,以便为该语言的工作原理打下良好的基础。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多