js名称空间和变量作用域

时间:2016-05-13 09:56:40

标签: javascript jquery

如果我有自定义javascript命名空间,如下面的结构

myns.controllers.home = {
    init = function(){
    },
    doSomething: function(){
        var cars = 100; // simple example
        var url = 'someurl';
        myns.ajaxHelper.execute(url, { id: id }, myns.controllers.home.jobUtils.callback);
    }
}
myns.controllers.home.jobUtils.callback = function (cars) {
    alert(cars.lenght); // cars is undefined?       
}

为什么汽车变量在这里未定义,你将如何解决/重构?

3 个答案:

答案 0 :(得分:1)

我尝试将变量声明为ns属性:

myns.controllers.home = {
  cars: 100,
  init: ...

答案 1 :(得分:0)

myns.ajaxHelper.execute(url, { id: id }, myns.controllers.home.jobUtils.callback()); //for executing a function

var cars = 100; // simple example
myns.ajaxHelper.execute(url, { id: id }, myns.controllers.home.jobUtils.callback(cars)); //to pass a variable into a function

我认为你在执行函数

时会错过'()'开启和关闭括号

答案 2 :(得分:0)

我们并不完全清楚你在问什么,但我认为这可能有所帮助:

如果您创建一个更好的回调函数来捕获本地cars值,您可以:

myns.ajaxHelper.execute(url, 
                        { id: id }, 
                        function(data){
                         myns.controllers.home.jobUtils.callback(data, cars)
                        });

然后将您的回调定义为:

myns.controllers.home.jobUtils.callback = function (data, cars) {
    alert(cars.lenght); // cars is undefined?       
}

虽然100的值length可能具有{{1}}但我不清楚。也许我误解了。