具有全局输入的函数返回NaN

时间:2018-03-30 04:25:08

标签: javascript function methods return nan

修改

我想更具体地说明为什么我这样做。下面的代码是我一直在努力工作的东西。

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;

或args给出

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

它将返回NaN。

我很感激帮助。

6 个答案:

答案 0 :(得分:0)

您无法访问

等函数内的变量
investment.iniInvest = 10;
investment.interest = 20;

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



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




答案 1 :(得分:0)

问题在于,当您在函数内部声明变量时,它仅存在于该函数中,并且仅在本地。因此,它不能从函数外部引用。

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

答案 2 :(得分:0)

代码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() );




答案 3 :(得分:0)

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

答案 4 :(得分:0)

您可以尝试类似

的内容
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());

答案 5 :(得分:0)

感谢大家的所有答案!阅读每个人的答案后,我能够修复我的语法并解决问题。

这是我完成的代码。

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());

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

再次感谢!