获取变量*值*而不是变量本身

时间:2015-06-14 19:23:38

标签: javascript variables

看看这段代码:

<button id="button">Test</button>
<button id="button2">Test</button>

<script>

  button = document.getElementById("button");
  button2 = document.getElementById("button2");

  var x = 5;

  button.onclick = function() {
    alert(x);
  }

  var x = 10;

  button2.onclick = function() {
    alert(x);
  }


</script>

当我点击这两个按钮时,我得到10作为结果。但我希望得到5作为第一个按钮的结果。即,我不想将alert参数设置为变量,而是将变量的实际值设置为。是否可以在JavaScript中执行此操作?

2 个答案:

答案 0 :(得分:-1)

好吧,如果这是所有单行代码,那么你将覆盖x

如果您希望它们的每个功能具有不同的结果,那么您可以将值 local 写入该函数。

  button.onclick = function() {
    var x = 5;// now local to the function
    alert(x);
  }


  button2.onclick = function() {
    var x = 10;// now local to the function
    alert(x);
  }

您的代码正在执行以下操作:

  1. 将x声明为5,
  2. 设置第一个按钮的回调以警告x
  3. 将x更改为10
  4. 设置第二个按钮的回调以警告x
  5. (点击按钮)---&gt;警告上次更改为10的x的当前值

问题是你的函数在它为5时没有保存x的值。只要调用变量x,它就会抓住变量private void createTable(Composite parent){ table = new Table (parent, SWT.BORDER); TableColumn tcFile = new TableColumn(table, SWT.LEFT); TableColumn tcStatus = new TableColumn(table, SWT.LEFT); tcFile.setText("File"); tcStatus.setText("Status"); tcFile.setWidth(500); tcStatus.setWidth(500); table.setVisible(true); table.setHeaderVisible(true); } private void populateTable(String file, String status){ TableItem item = new TableItem(table, SWT.LEFT); item.setText(new String[] { file, status}); } Composite top = new Composite(parent, SWT.WRAP); GridLayout layout = new GridLayout(); layout.marginHeight = -5; layout.marginWidth = 0; top.setLayout(layout); Composite banner = new Composite(top, SWT.WRAP); banner.setLayoutData(new GridData(GridData.FILL, GridData.VERTICAL_ALIGN_BEGINNING, false, false)); layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 10; layout.numColumns = 5; banner.setLayout(layout); createTable(top); ,所以它抓住了当前的价值。

我的工作是:

  1. 将第一个按钮的回调设置为函数
  2. 该函数将名为x的局部变量设置为等于5
  3. 该函数将警告局部变量,其值设置为5
  4. (点击按钮)---&gt;提醒x的当前值,该值在本地声明为5

答案 1 :(得分:-1)

JavaScript具有变量的函数范围。如果要使用相同的变量两次但它不应该是相同的引用,则需要将代码放在不同的范围(函数)中。所以你可以这样做:

button = document.getElementById("button");
button2 = document.getElementById("button2");

(function() {
    var x = 5;

    button.onclick = function() {
        alert(x);
    }
})();

(function() {
    var x = 10;

    button2.onclick = function() {
        alert(x);
    }
})();

JSFiddle:http://jsfiddle.net/q91uhvw3/

或者,如果您不想这样做,可以在为第一个按钮创建x处理程序时强制评估onclick,如下所示:

button = document.getElementById("button");
button2 = document.getElementById("button2");


var x = 5;

(function(xRightNow) {
    button.onclick = function() {
        alert(xRightNow);
    }
})(x);

var x = 10;

button2.onclick = function() {
    alert(x);
}

JSFiddle:http://jsfiddle.net/q91uhvw3/2/