所以我遇到了一些JavaScript问题。我不是专业人士,也不明白为什么这不起作用。我所要做的就是将我的私有变量赋值给私有函数的返回值。如果我设置var xxx = function name(),它将在我引用xxx时执行该函数。这是我的代码。注 - var username = getsessionuser();下方。
//Namespace
var SESSIONCONTROLS=SESSIONCONTROLS || {};
SESSIONCONTROLS.APP=SESSIONCONTROLS.APP || {};
SESSIONCONTROLS.APP.User = (function () {
// defined within the local scope
//Private Variable
var username=getsessionuser();
//Privatemethod
var getsessionuser=function(){var mname='My Name'; return mname;}
//Private Property & Method Example
var privateMethod1 = function () { alert("private method 1"); }
var privateMethod2 = function () { alert("private method 2");}
var privateProperty1 = 'foobar';
return {
//Public Method & Nested Namespace examples
//Public Methods
publicMethod1: privateMethod1,
//nested namespace with public properties
properties:{
publicProperty1: privateProperty1,
sessionname:username
},
//another nested namespace
utils:{
publicMethod2: privateMethod2
}
}
})();
这就是它在另一个例程中的称呼。
var name=SESSIONCONTROLS.APP.User.properties.sessionname;
alert(name);
为什么这不起作用?
答案 0 :(得分:4)
你有一个简单的订购问题:
var username=getsessionuser();
//Privatemethod
var getsessionuser=function(){var mname='My Name'; return mname;}
JavaScript不会抱怨未定义的变量引用,因为它会将函数中的所有var
语句视为在代码的最开头出现。但是,var
语句中的初始化按照它们出现的顺序执行。
因此,在您的代码尝试初始化username
时,未定义变量getsessionuser
。
如果您只是重新排序这两个语句以便首先定义该函数,那么该部分至少会起作用。
或者,您可以使用函数声明语句定义函数:
function getsessionuser() {
var mname = "My Name";
return mname;
}
那么即使你在函数之前保留username
的初始化,你的代码也会工作,因为函数声明也会隐式地“挂起”到函数的开头。
答案 1 :(得分:1)
在定义之前调用getsessionuser()。移动
var getsessionuser=function(){var mname='My Name'; return mname;}
上面
var username=getsessionuser();