簡體   English   中英

將變量訪問到函數中-Javascript

[英]Access to variables into functions - Javascript

我在訪問函數中的變量時遇到麻煩。 我已經測試了幾個代碼,但似乎沒有一個適合我。 這是我到目前為止的js代碼:

    function Multiply (x,y) {
    var a = x.value,
        b = y.value,
        r = a*b;
    document.getElementById("result").innerHTML = r + " g/mol";     
    }
    function Multiply2 (x,y) {
    var c = x.value,
        d = y.value,
        r2 = c*d;
    document.getElementById("result2").innerHTML = r2 + " g/mol";       
    }
    function Multiply3 (x,y) {
    var e = x.value,
        f = y.value,
        r3 = e*f;
    document.getElementById("result3").innerHTML = r3 + " g/mol";       
    }
    function Multiply4 (x,y) {
    var g = x.value,
        h = y.value,
        r4 = g*h;
    document.getElementById("result4").innerHTML = r4 + " g/mol";       
    }
    function Multiply5 (x,y) {
    var i = x.value,
        j = y.value,
        r5 = i*j;
    document.getElementById("result5").innerHTML = r5 + " g/mol";       
    }

基本上,我需要另一個函數來求和所有值(r,r2,r3,r4和r5)並在HTML文檔的<span>標記中將結果顯示為其他值。 這就是我追逐的那個:

document.getElementById("total").innerHTML = total + " g/mol";

局部變量是特定函數的私有變量,僅在函數執行期間和/或直到該函數中的所有閉包完成之前才存在於該函數中。 您根本無法從函數外部訪問它們,即使可以,它們在函數運行后將不再存在。 因此,嘗試訪問它們並不是考慮此問題的正確方法。

相反,我建議的是一個函數,它執行相同的工作,但將計算結果作為返回值返回,您可以在調用該函數后將其收集。 您還可以在要在DOM中將計算設置為參數的id值中傳入參數,這樣對函數的所有5個調用都可以使用完全相同的代碼,如下所示:

function Multiply(x, y, id) {
    var result = x.value * y.value;
    document.getElementById(id).innerHTML = result + " g/mol";     
    return result;
}

var total = Multiply(a, b, "result");
total += Multiply(c, d, "result2");
total += Multiply(e, f, "result3");
total += Multiply(g, h, "result4");
total += Multiply(i, j, "result5");
document.getElementById("total").innerHTML = total + " g/mol";

根據x,y參數的來源,您可能會將這5個函數調用轉換為一個循環,並在循環內部進行一個函數調用。


值得記住DRY原理 (不要重復自己),並且每當您看到同一代碼的多個副本時,都應該循環執行某些操作,將通用代碼分解為多用途函數或同時使用兩者。

嘗試這個

var r, r2, r3, r4, r5;

function Multiply (x,y) {
  var a = x.value,
      b = y.value;
  r = a*b;
  document.getElementById("result").innerHTML = r + " g/mol";     
}

function Multiply2 (x,y) {
  var c = x.value,
      d = y.value;
  r2 = c*d;
  document.getElementById("result2").innerHTML = r2 + " g/mol";       
}

function Multiply3 (x,y) {
  var e = x.value,
      f = y.value;
  r3 = e*f;
  document.getElementById("result3").innerHTML = r3 + " g/mol";       
}

function Multiply4 (x,y) {
  var g = x.value,
      h = y.value;
  r4 = g*h;
  document.getElementById("result4").innerHTML = r4 + " g/mol";       
}

function Multiply5 (x,y) {
  var i = x.value,
      j = y.value;
  r5 = i*j;
  document.getElementById("result5").innerHTML = r5 + " g/mol";       
}

答:您不能訪問局部變量。 但是在您的情況下,您可能可以使用一個返回結果並多次調用的函數。

function Multiply (x,y) {
    return x.value * y.value;    
}
var r1 = Multiply(x1, y1);
document.getElementById("result1").innerHTML = r1 + " g/mol";
var r2 = Multiply(x2, y2);
document.getElementById("result2").innerHTML = r2 + " g/mol";
var r3 = Multiply(x3, y3);
document.getElementById("result3").innerHTML = r3 + " g/mol";
var r4 = Multiply(x4, y4);
document.getElementById("result4").innerHTML = r4 + " g/mol";
var r5 = Multiply(x5, y5);
document.getElementById("result5").innerHTML = r5 + " g/mol";
var total = r1 + r2 + r3 + r4 + r5;
document.getElementById("total").innerHTML = total + " g/mol";

編輯:通過將DOM更新提取到另一個函數中,進一步消除重復。

function Multiply(x,y) {
    return x.value * y.value;    
}
function UpdateDOM(value, element) {
    document.getElementById(element).innerHTML = value + " g/mol";
}
var r1 = Multiply(x1, y1);
UpdateDOM(r1, "result1");
var r2 = Multiply(x2, y2);
UpdateDOM(r2, "result2");
var r3 = Multiply(x3, y3);
UpdateDOM(r3, "result3");
var r4 = Multiply(x4, y4);
UpdateDOM(r4, "result4");
var r5 = Multiply(x5, y5);
UpdateDOM(r5, "result5");
UpdateDOM(r1 + r2 + r3 + r4 + r5, "total");

您可以進一步添加另一個函數,該函數通過接受x, y, element參數並返回總計結果來包裝這兩個函數。

function Multiply(x,y) {
    return x.value * y.value;    
}
function UpdateDOM(value, element) {
    document.getElementById(element).innerHTML = value + " g/mol";
}
function DisplayResult(x, y, element) {
    var result = Multiply(x,y);
    UpdateDOM(result, element);
    return result;
}
var total = DisplayResult(x1, y1, "result1") 
            + DisplayResult(x2, y2, "result2") 
            + DisplayResult(x3, y3, "result3") 
            + DisplayResult(x4, y4, "result4")
            + DisplayResult(x5, y5, "result5");
UpdateDOM(total, "total");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM