JavaScript全局变量声明

JavaScript全局变量声明,javascript,global-variables,variable-declaration,Javascript,Global Variables,Variable Declaration,下面的脚本工作正常,但我需要做一些修改。在每个函数中,我得到不同公式所需的值。然而,我倾向于在不同的函数中复制同一行代码 前 我想一次性声明所有变量,而不仅仅是使用我需要的特定函数。如果我在顶部声明它们,而不是调用它们一次,它们仍然保留原始值,因此如果更改,我需要将该值更新为当前值。如果您喜欢在小提琴中操作,则代码将很难阅读 取而代之的是 var myVars; window.onload=function() { myVars = { 'list_price': documen

下面的脚本工作正常,但我需要做一些修改。在每个函数中,我得到不同公式所需的值。然而,我倾向于在不同的函数中复制同一行代码


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

如果您喜欢在小提琴中操作,则代码将很难阅读

取而代之的是

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

如果你像在小提琴上那样做,你的代码将很难阅读

取而代之的是

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) 您可以为更改全局变量的
    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);
    

    有两种方法可以做到这一点:

  • 值更改时更新变量
  • 使用始终返回正确值的函数
  • 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);
    

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

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

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

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

    我不知道你在问什么。你是在问如何创建全局变量吗?我个人想为元素声明变量,并在需要时获取其值。比如
    varv1=document.getElementById('one')和使用like
    v1.value
    我基本上在不同的函数中使用相同的变量值(例如v1=document.getElementById('one').value;),但是我想声明所有的输入值一次,它们使用函数中的变量。我不确定您的要求是什么。你是在问如何创建全局变量吗?我个人想为元素声明变量,并在需要时获取其值。比如
    varv1=document.getElementById('one')
    和use like
    v1.value
    我基本上在不同的函数中使用相同的变量值(例如v1=document.getElementById('one').value;),但是我想声明所有的输入值一次,它们使用函数中的变量,如果输入框中的值发生变化,v1和v2仍然会给出旧值,阅读问题carefully@shadow非常好的一点,尤其是输入会经常变化,因为人们可能希望看到基于新输入值(左侧)的不同结果(右侧)。如果输入框中的值发生变化,v1和v2仍会给出旧值,请阅读问题carefully@shadow很好,,尤其是输入会经常改变,因为人们可能希望看到基于新输入值的不同结果(在右边)(在左边)。所有这一切都很神奇,我喜欢看到不同的解决方案。谢谢你一个小评论,我不得不从“lease\u payment”中删除.value,因为这样调用时它会返回“undefined”:var x4=myVars.lease\u payment.value。你能解释为什么吗?我在那里有一个错误的值。现在移除。请注意,object中最后一项后面缺少逗号。所有这一切都令人惊讶,我喜欢看到不同的解决方案。谢谢你一个小评论,我不得不从“lease\u payment”中删除.value,因为这样调用时它会返回“undefined”:var x4=myVars.lease\u payment.value。你能解释为什么吗?我在那里有一个错误的值。现在移除。请注意,对象中最后一项后面缺少逗号