0

So I'm having some JavaScript issues. I'm not a pro, and don't understand why this does not work. All I am trying to do is assign my private variable to the return value of a private function. If I set var xxx=function name() will it execute the function when I reference xxx. Here is my code. Note - var username=getsessionuser(); below.

//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
    }
  }
})();

This is how its called in another routine.

var name=SESSIONCONTROLS.APP.User.properties.sessionname;
alert(name);    

Why doesn't this work?

4

2 回答 2

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之前离开初始化,您的代码也将起作用,因为函数声明也被隐式地“提升”到函数的开头。

于 2015-04-22T15:24:34.260 回答
1

您在定义之前调用 getsessionuser() 。移动

var getsessionuser=function(){var mname='My Name'; return mname;} 

以上

var username=getsessionuser();
于 2015-04-22T15:28:19.867 回答