【问题标题】:Functions With Global Inputs Return NaN具有全局输入的函数返回 NaN
【发布时间】:2018-09-09 03:16:18
【问题描述】:

编辑:

我想更具体地说明我这样做的原因。下面的代码是我一直在尝试的。

function newClass(self) {
    this.invest;
    this.interest;
    function method1() {
        return this.invest + this.interest;
    }
}
var newC = new newClass();
newC.invest = prompt("Enter investment");
newC.interest = prompt("Enter interest");
alert(newC.method1());

编辑结束:

我对 javascript 语言还很陌生,无法弄清楚为什么我的函数总是返回 NaN。我尝试了许多不同的修复方法,但我尝试过的都没有。下面是一个例子。

function investment() {
    var iniInvest;
    var interest;
    return iniInvest + interest;
}

investment.iniInvest = 10;
investment.interest = 20;  
console.log(investment())

这将返回一个 NaN。我尝试创建类和方法并尝试解析变量,但它们仍然返回 NaN。

除非变量值被赋值给函数中的var

var iniInvest = 10;

或参数给定

function investment(args1, args2) {
    return args1 + args2;
}
console.log(investment(10, 20));

它将返回 NaN。

感谢您的帮助。

【问题讨论】:

  • 传递参数是要走的路。当您分配像investment.iniInvest 这样的值时,它会将它们分配给函数对象。要在函数中访问它们,您需要使用 investment.iniInvest + investment.interest 这有点傻。快速回顾一下 javascript 作用域会消除很多困惑。

标签: javascript function methods return nan


【解决方案1】:

感谢大家的回答!在阅读了大家的回答后,我能够修复我的语法并解决问题。

这是我完成的代码。

function newClass() {
    this.invest;
    this.interest;
        this.investment = function() {
            return parseFloat(this.invest) + parseFloat(this.interest);
        }
    }
    var newC = new newClass();
    newC.invest = prompt("Enter investment");
    newC.interest = prompt("Enter interest");
    alert(newC.investment());

它返回正确的答案。如果此代码需要修复,请告诉我。

再次感谢!

【讨论】:

    【解决方案2】:

    你可以试试

    var investment = function () {
        this.iniInvest;
        this.interest;
        this.sum = function() {
            return this.iniInvest + this.interest;
        }
    }
    var i = new investment()
    i.iniInvest = 10;
    i.interest = 20;  
    console.log(i.sum());
    

    【讨论】:

      【解决方案3】:

      问题在于,当您在函数内部声明变量时,它只存在于该函数内部,并且只是局部的。因此,它不能从函数外部引用。

      在您给出的示例中,您尝试引用变量investment.iniInvestinvestment.interest,但这些变量仅存在于投资函数的本地引用中,并且在函数结束后被销毁,所以您不能参考他们。无论如何,您最好还是使用 args。

      【讨论】:

        【解决方案4】:

        当您在函数中声明 iniInvest interest 时,您不能在该函数之外使用该变量,因为它们超出了范围。使该变量成为全局变量。 您可以通过https://www.w3schools.com/js/js_scope.asp 了解变量范围。

        【讨论】:

          【解决方案5】:

          代码investment.iniInvest = 10; 正在创建iniInvest 投资属性,而不是局部变量。此代码不会修改在函数范围内创建的变量var iniInvest

          function investment() {
              return investment.iniInvest + investment.interest;
          }
          
          investment.iniInvest = 10;
          investment.interest = 20;  
          console.log(investment())
          

          此代码实现了您的要求,但这不是解决问题的好方法。

          以下内容更可能是您要查找的内容:

          function investment( iniInvest, interest) {
            this.iniInvest = iniInvest;
            this.interest = interest;
            this.investment = function() {
              return this.iniInvest + this.interest;
            };
          }
              
          var inv = new investment( 10, 30 );
          console.log( inv.investment() );
          inv.iniInvest = 5;
          inv.interest = 10;
          console.log( inv.investment() );

          【讨论】:

            【解决方案6】:

            你不能访问像

            这样的函数内部的变量
            investment.iniInvest = 10;
            investment.interest = 20;
            

            因为,您需要全局访问变量,以便将变量保留在函数之外并从代码中的任何位置初始化它们:

            var iniInvest;
            var interest;
            function investment() {
                return iniInvest + interest;
            }
            iniInvest = 10;
            interest = 20;
            console.log(investment())

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-07-19
              • 2019-05-26
              • 2022-01-13
              • 2012-09-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多