This question already has answers here:
Is JavaScript a pass-by-reference or pass-by-value language?
(30个答案)
4年前关闭。
我知道我在使用命名空间时犯了严重错误。我在网络/谷歌搜索中研究了一吨后发布了这个问题。仍然找不到我在做什么错。你能帮我吗?
这就是我所拥有的
Java脚本
Javascript文件1
Javascript文件2
HTML
根据最终用户单击字段,从html file1调用js_namespace1.n1function1
//
//在html file2中处理数据(收集名称的值),然后调用返回函数
在
例如当我做
请注意,从
我的期望是当
您能解释一下发生了什么吗?最重要的是指出在设计中应该避免的任何错误(命名空间,函数调用之间的参数交换)。我是否在javascript中正确使用了名称空间-有什么推荐的最佳做法?
有关您的代码和我的修正的一些要点:
您对
您的语法在这里
在这里:
我测试了代码here,并查看了预期的行为。
(30个答案)
4年前关闭。
我知道我在使用命名空间时犯了严重错误。我在网络/谷歌搜索中研究了一吨后发布了这个问题。仍然找不到我在做什么错。你能帮我吗?
这就是我所拥有的
Java脚本
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
根据最终用户单击字段,从html file1调用js_namespace1.n1function1
//
js_namespace1.n1function1
调用js_namespace2.n2function1
并显示另一个html file2//在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_namespace2.n2function1
调用js_namespace1.n1function1
时,数组不作为参数传递。我的期望是当
js_namespace1.n1function1
调用js_namespace2.n2function1
时,它不会用Js_namespace2.list_of_names
更新add_another_name
。您能解释一下发生了什么吗?最重要的是指出在设计中应该避免的任何错误(命名空间,函数调用之间的参数交换)。我是否在javascript中正确使用了名称空间-有什么推荐的最佳做法?
最佳答案
这是来自Google的link快速搜索,介绍JS的最佳做法。那里有不同的思想流派(例如use of terminating semicolons),但是,如果您自己不注意,使用某种短毛绒可能会帮助您找出错别字,区分大小写和代码中意外的空格。以下是带有一些修复程序的代码:
(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
未定义我测试了代码here,并查看了预期的行为。
09-25 20:10