看看这段代码:
<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中执行此操作?
答案 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);
}
您的代码正在执行以下操作:
问题是你的函数在它为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 :(得分:-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/