变量在javascript中无效

时间:2013-11-01 08:03:43

标签: javascript global-variables

Java和JavaScript中的变量范围是相同的。我在javascript中有一个变量,并在onLoad页面上分配。但是在我的项目中继续添加函数时,我将此变量设置为NULL。我多次检查这个变量没有再次分配,但很少的地方(在函数中)使用了同名的局部变量。我怀疑这会影响我的全局变量值。我现在有很多功能,我不想触摸它们。请帮我解决。

此处的代码: 在

 <script>
// other variables goes here.
    var BUSINESS_CODE_CUSEUR = "<%=BusinessLine.BUSINESS_LINE_CODE_GLOBAL_CUSTODY_UK%>";
    var branchId = null;
//on Refresh branch,
function refreshByBranch(){
            branchId = dijit.byId("branchList").attr("value");
         // other functions calling here who ever is depending on branch.
                        searchTeamList(branchId);
            searchCustomer(branchId);
            searchClientRelationshipFsList();
//and so on.
}

//my function is here: calling on an image click.
function showSelectRootCauseDialog(){
    var br = dijit.byId("branchList").attr("value");
    console.info("showSelectRootCauseDialog - branchId:" + branchId);
    console.info("showSelectRootCauseDialog - br:" + br);
// getting null on line 2.
}
 </script>

- 问题就像这样解决了。我们对每个功能都进行了修改。

    function refreshByBranch(){
                branchId = dijit.byId("branchList").attr("value");
                var url = contextPath + "/" + servlet + "?cmd_query_for_user=1&branchId=" + branchId;
                originatorUserStore.url = url;
                ownerUserStore.url = url;
                resolverUserStore.url = url;
                searchTeamList(branchId);
                searchCustomer(branchId);
                searchClientRelationshipFsList();
                if(currentBusinessLineCde == gcBusinessLineCde){
                //  var branchId = dijit.byId("branchList").attr("value");
////-- Problem solved here. by making comment. 
                    searchGroupList(branchId);  
                    searchLocationList(branchId);
                    searchClientList(branchId);
                    searchAccountManagerList(branchId);
                }
            }

2 个答案:

答案 0 :(得分:0)

  

Java和JavaScript中的变量范围是相同的。

不,但它很相似。首先,JavaScript没有块范围; Java确实如此。例如,在JavaScript中:

for (var i = 0; i < someLimit; ++i) {
    // do something
}
console.log(i); // Works, the variable exists outside the loop; it wouldn't in Java

更多:Poor misunderstood var

  

我在javascript中有一个变量,并在onLoad Page上分配。但是在我的项目中不断添加函数时,我将此变量设为NULL。

听起来你在onLoad运行之前使用了其他功能。 window load事件在页面加载中发生非常

  

...但是很少的地方(在函数中)使用了具有相同名称的局部变量。我怀疑这会影响我的全局变量值......

如果您正确声明了局部变量,那么这样做会阻止您使用全局变量,但不会更改全局值。这就像Java(一个局部变量遮蔽实例成员)。

例如:

var x;
x = 42;

function foo() {
    var x;

    console.log(x); // undefined
}

foo();
console.log(x); // 42

xfoox全局不一样。在x中使用foo使用x中的foo。在x之外使用foo使用全局。

答案 1 :(得分:0)

  

Java和JavaScript中的变量范围是否相同?

简答:不,变量在这些语言中有不同的范围。 Java中的变量有block scope,而在JavaScript中它们有function scope