js命名空间和变量范围

js namespaces and variable scope

本文关键字:范围 变量 命名空间 js      更新时间:2023-09-26

如果我有自定义的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?       
}

为什么cars变量在这里是未定义的,您将如何解决/重构这个问题?

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

myns.controllers.home = {
  cars: 100,
  init: ...
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

我认为您在执行函数时错过了"()"打开和关闭括号

您的要求还不完全清楚,但我认为这可能会有所帮助:

如果您创建一个更好的回调函数来捕获本地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。也许我误解了。