访问函数内部的变量,Javascript

时间:2014-03-29 03:08:41

标签: javascript function variables math web

我有一个问题。或者更像是一项任务或任何你可以称之为的任务。 看到我得到了这个我想做的事情,但是我需要访问一个函数内部的变量,我知道之前已经问过这个问题,但我无法弄明白。 其实我有两个问题。

我正在尝试创建一个表单,向用户显示两个随机数,然后他必须回答这两个数字的总和。 这是我的代码:

HTML

<button class="Btn" id="check" onclick="check()">Check!</button>
<button class="Btn" onclick="newCalculation()">New Calculation</button>
<label id="question"></label>
<input id="answerBox" class="txtBox" type="text"></input>

这是两个按钮,一个标签和一个文本框。第一个按钮进行新计算,第二个按钮检查文本框的值是否等于计算的答案。标签用于显示计算。

这是新计算按钮的Javascript:

function newCalculation() {
var firstnumber, secondnumber, answer;
firstnumber = (Math.floor(Math.random()*10)+1)*10+(Math.floor(Math.random()*10));
secondnumber = (Math.floor(Math.random()*10)+1)*10+(Math.floor(Math.random()*10));
answer = firstnumber + secondnumber;
document.getElementById("question").innerHTML = firstnumber + " + " + secondnumber + " = ";
}

据我所知,这一切都很严谨。但是当我必须检查它是否正确时,我无法访问变量。

Checkbutton

function check() {
  if (document.getElementById("answerBox").innerHTML === newCalculation.answer) {
    alert("Correct!")
}
  else {
    alert("Wrong!")
};}

在控制台日志中,它使用文本框显示正确的值,但未定义&#39;用答案变量。如果我删除&#34; newCalculation。&#34;它只是说变量是未定义的。 我只是对知道如何解决这个问题感兴趣,并且让所有这些都有效。如果你能给出完整的代码示例,那就太棒了!

由于

2 个答案:

答案 0 :(得分:0)

首先,input是自闭标签,它没有开/关标签,如

<input id="answerBox" class="txtBox" type="text">

而不是

<input id="answerBox" class="txtBox" type="text"></input>

您应该从输入标记中获取将要比较的值。

var compareVal = document.getElementById("answerBox").value;

<强>更新

当您想要共享变量时,最好创建类及其相关的属性和方法,您可以使用所需的paritcular方法访问它的属性,就像您的情况一样。

的javaScript

var calc = function (){
    this.answer =""; //can access on newCalculation() and check() 

    this.newCalculation = function () {
        var firstnumber, secondnumber, 
        firstnumber = (Math.floor(Math.random()*10)+1)*10+(Math.floor(Math.random()*10));
        secondnumber = (Math.floor(Math.random()*10)+1)*10+(Math.floor(Math.random()*10));
        this.answer = firstnumber + secondnumber;
        document.getElementById("question").innerHTML = firstnumber + " + " + secondnumber + " = ";
    },

    this.check = function() {
       var checkedVal = parseInt(document.getElementById("answerBox").value, 10);
        if (checkedVal === this.answer) {
            alert("Correct!");
        }else {
            alert("Wrong!");
       }
    }
}

var myCal = new calc(); //creating object by calling class/constructor

function checkAll(action){
    if(action == 'check'){
        myCal.check();
    }

    if(action == 'newCalc'){
        myCal.newCalculation();
    }
}

<强> HTML

<button class="Btn" id="check" onclick="checkAll('check')">Check!</button>
<button class="Btn" onclick="checkAll('newCalc')">New Calculation</button>
<label id="question"></label>
<input id="answerBox" class="txtBox" type="text" value="20"/>

DEMO

答案 1 :(得分:0)

当你在JavaScript中声明一个没有其他块的函数时,它属于全局范围,因此变量newCalculation存在类型function

我建议的是简单并声明

     var answer;

在全局范围内 - 意思是不在任何函数中。然后,当您在check()中进行比较时,只需与answer进行比较而不是newCalculation.answer