JavaScript全局变量声明

时间:2013-11-08 13:06:17

标签: javascript global-variables variable-declaration

以下脚本可以正常工作,但我需要做一些修正。在每个函数中,我得到了不同公式的值。但是我倾向于在不同的函数中复制相同的代码行。

实施例

function one(){ var v1= document.getElementById('one').value; }
function two(){ var v1= document.getElementById('one').value; }

Full code

我想声明所有变量一次,而不仅仅使用我需要的特定函数。如果我在顶部声明它们而不是一次它们被调用它们仍然保持原始值,所以我需要在当前更改时将该值更新为当前值。

3 个答案:

答案 0 :(得分:3)

如果你这样做,你的代码将很难阅读。

取而代之的是

var myVars;
window.onload=function() {
  myVars = { 
    'list_price': document.getElementById('list_price'),
    'negotiated': document.getElementById('negotiated'),
    .
    .
    'lease_payment': document.getElementById('lease_payment')
  }

现在你可以做到

var price = myVars.list_price.value;

或者可能添加一个功能

function getVal(id) {
  var val = document.getElementById(id).value;
  if (val =="" || isNaN(val)) return 0;
  return parsetInt(val,10); 
}

现在你可以做到

var price = getVal("list_price");

答案 1 :(得分:1)

有两种方法可以解决这个问题:

  1. 值更改时更新变量
  2. 使用始终返回正确值的函数
  3. 1)您可以为change事件或更改全局变量的keyup事件添加侦听器:

    // save initial value
    var val = document.getElementById('one').value;
    
    // update the value when input is changed
    addEventListener(document.getElementById('one'), 'change', function() {
      val = document.getElementById('one').value;
    });
    
    console.log(val);
    

    2)您可以使用始终返回当前值的函数:

    var val = function() { return document.getElementById('one').value; };
    
    console.log(val());
    

    2b)如果你讨厌括号,你可以定义一个使用上面函数作为getter的属性:

    Object.defineProperty(window, 'one', {
      get : function() { return document.getElementById('one').value; }
    });
    
    console.log(one);
    

答案 2 :(得分:1)

mplungjan的解决方案很棒。如果您对全局变量泄漏到窗口范围感到担心,请将您的代码包装在一个立即调用的函数表达式中以防止这种情况发生:

(function(){
  // code goes here
}());