Javascript 命名空间 - 函数之间的变量交换

Javascript namespace - exchange of variable between functions

本文关键字:变量 交换 之间 函数 命名空间 Javascript      更新时间:2023-09-26

我知道我在使用命名空间时做了一些非常错误的事情。我在网络/谷歌搜索中研究了大量内容后发布了这个问题。仍然找不到我做错了什么。你能帮帮我吗?这就是我所拥有的

爪哇语

Javascript 文件1

(function (js_namspace1, $, undefined) {
    js_namespace1.n1function1 = function(){
      var return_obj = {
         return_function_to_call: “n1function_name2”
         return_function_to_call_namespace: “js_namespace1”
       }
      js_namespace2.n2function1(return_obj)
    }
    Js_namespace1.n1function_name2 =function(list_of_names){
        Js_namespace1.list_of_names = list_of_names
        // do some processing to js_namespace1. list_of_names
    }
}
(window. js_namspace1 = window. js_namspace1|| {}, jQuery ));

Javascript 文件2

(function (js_namspace2, $, undefined) {
    js_namespace2.n2function1(return_obj) = function(return_obj){
    js_namespace2.return_function_to_call =     return_obj.return_function_to_call
    js_namespace2.return_function_to_call_namespace = return_obj.  .return_function_to_call_namespace
    // do some processing
    Js_namespace2.list_of_names = []
    Js_namespace2. list_of_names.push(value_name)
    window[js_namespace2.return_function_to_call_namespace][js_namespace2.return_function_to_call]( Js_namespace2.list_of_names);
  }
}
(window. js_namspace2 = window. js_namspace2|| {}, jQuery ));

目录

从 html file1 调用 js_namespace1.n1function1,基于最终用户单击字段

js_namespace1.n1function1调用js_namespace2.n2function1并显示另一个 html 文件2

在 html file2 中处理数据(收集名称的值(,然后调用返回函数Js_namespace1.n1function_name2

Js_namespace1.n1function_name2,过程Js_namespace1.list_of_names(array),但是当我这样做时,它也会在Js_namespace2.list_of_names

例如,当我这样做时 Js_namespace1.n1function_name2.push(add_another_name) ,然后调用 js_namespace1.n1function1(而 又调用 js_namespace2.n2function1 (。 Js_namespace2.list_of_names包含 add_another_name 的值。

请注意,当从js_namespace1.n1function1调用js_namespace2.n2function1时,数组不会作为参数传递。

我的期望是,当js_namespace1.n1function1呼叫js_namespace2.n2function1时,它不会add_another_name更新Js_namespace2.list_of_names

你能解释一下发生了什么吗? 最重要的是指出我在这个设计中应该避免的任何错误(命名空间,函数调用之间的参数交换(。我是否在 javascript 中正确使用了命名空间——有什么最佳实践可以推荐吗?

这是一个来自 Google 快速搜索 JS 最佳实践的链接。有不同的思想流派(例如,使用终止分号(,但是如果您自己无法注意到,使用某种 linter 可能会帮助您找出代码中的拼写错误、区分大小写和意外空格。下面是一些修复的代码:

(function (js_namespace1, $, undefined) {
    js_namespace1.n1function1 = function(){
      var return_obj = {
         return_function_to_call: "n1function_name2",
         return_function_to_call_namespace: "js_namespace1"
       };
      js_namespace2.n2function1(return_obj)
    };
    js_namespace1.n1function_name2 =function(list_of_names){
        js_namespace1.list_of_names = list_of_names;
        console.log(js_namespace1.list_of_names); // ["some_name"]
    };
}
(js_namespace1 = window.js_namespace1 || {}, jQuery));
(function (js_namespace2, $, undefined) {
    js_namespace2.n2function1 = function(return_obj){
    js_namespace2.return_function_to_call =  return_obj.return_function_to_call;
    js_namespace2.return_function_to_call_namespace = return_obj.return_function_to_call_namespace;
    // do some processing
    js_namespace2.list_of_names = [];
    js_namespace2.list_of_names.push("some_name");
    window[js_namespace2.return_function_to_call_namespace][js_namespace2.return_function_to_call]( js_namespace2.list_of_names);
  };
}
(js_namespace2 = window.js_namespace2 || {}, jQuery));
js_namespace1.n1function1();

关于您的代码和我的修复的一些要点:

  • 您使用区分大小写的名称(如 js_namespace2 表示Js_namespace2
  • 您在此处的语法不正确js_namespace2.n2function1(return_obj) = function(return_obj) .
  • 在这里:return_obj. .return_function_to_call_namespace和其他人。
  • 未定义value_name

我在这里测试了代码并看到了预期的行为。