求避免js变量名和函数名跟别人冲突的最佳方案

时间:2021-07-10 00:44:54
比如我写了这样一个函数
<script>
var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
var n=n+133;
alert(n);
}
click();
</script>

不要把时间浪费在代码执行的结果上面啊!是我乱写的,重点看格式。比如我的那些变量名和函数名,还有它们所处于的位置。

用什么方法能很好的避免这段代码放在网站上面不会跟别人的代码冲突呢,因为这些函数名和变量名太常见了,别人也一定会用的。一直纠结这个命名冲突的问题,求经验丰富人士指点。

10 个解决方案

#1


(function(){var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
var n=n+133;
alert(n);
}
//click();
Window['MyExtFn'] = click;//只暴露一个入口变量名。
})()

MyExtFn();

#2


jquery就是这么干的

#3


仿块级作用域:
(function(){
    function name(){
      alert('name')
    }
})()

name()//error
jquery在避免和其他库冲突的时候就是这么干的:(function($){//这里的$就不会和其他的冲突咯})(jQuery)

#4



mynamespace={};
mynamespace.val1=val1;
mynamespace.val2=val2;
mynamespace.time = function(arg){
   alert(arg);
}

#5


引用 1 楼 foolbirdflyfirst 的回复:
JScript code
(function(){var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
var n=n+133;
alert(n);
}
//cli……


这样的话,click()外面还有i和n的定义变量  不会漏掉吗

#6


引用 3 楼 ycmjh2010 的回复:
仿块级作用域:
(function(){
    function name(){
      alert('name')
    }
})()

name()//error
jquery在避免和其他库冲突的时候就是这么干的:(function($){//这里的$就不会和其他的冲突咯})(jQuery)


是不是这样写就可以:
(function(我的名字){
任何代码
})(我的名字)

#7


引用 6 楼 yjxf8285 的回复:
引用 3 楼 ycmjh2010 的回复:

仿块级作用域:
(function(){
function name(){
alert('name')
}
})()

name()//error
jquery在避免和其他库冲突的时候就是这么干的:(function($){//这里的$就不会和其他的冲突咯})(jQuery)


是不是这样写就可以:
(function(……
用jq举例是为了说明仿块级作用域,(function($){//})(jQuery)这个写法表示把jQuery传入块作用域里,这样'$'符号就能在块内确保只被jq方法使用。什么效果楼主可以自己试验下,顺带下4楼的方法也不错啊

#8


引用楼主 yjxf8285 的回复:
比如我写了这样一个函数
<script>
var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
var n=n+133;
alert(……

(回复态度:温和)
楼主这不是明显的吃多了撑得么 明知道有歧义 为啥还明知故犯?
自己命个名 加个下划线之类的符号 和别人重的可能性概率是灰常小的

#9


引用 8 楼 fanchuanzhidu 的回复:
引用楼主 yjxf8285 的回复:
比如我写了这样一个函数
<script>
var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
……


不是吃多了撑的,因为一个项目很多人在写,我们一直也是用自己的名字缩写加下划线的方式避免发生命名冲突,而我总觉得这并不是一个很好的方法,而是一个很笨的方法,所以上来问问,看看大家有什么更方便的方法。

#10


使用有意义的变量名,不要用i,j,m,n这类的。这是常识。只有当确保页面非常简单,完全可控时,可以随便点。既然碰到不能随便的状况,就要用正确的变量使用方法,即科学命名。无所谓笨巧,事实上大巧不工。如果指望用那些某某结构而使你随便滥用变量名,无异于饮鸩止渴。有那工夫,不如避免常识性错误。

#1


(function(){var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
var n=n+133;
alert(n);
}
//click();
Window['MyExtFn'] = click;//只暴露一个入口变量名。
})()

MyExtFn();

#2


jquery就是这么干的

#3


仿块级作用域:
(function(){
    function name(){
      alert('name')
    }
})()

name()//error
jquery在避免和其他库冲突的时候就是这么干的:(function($){//这里的$就不会和其他的冲突咯})(jQuery)

#4



mynamespace={};
mynamespace.val1=val1;
mynamespace.val2=val2;
mynamespace.time = function(arg){
   alert(arg);
}

#5


引用 1 楼 foolbirdflyfirst 的回复:
JScript code
(function(){var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
var n=n+133;
alert(n);
}
//cli……


这样的话,click()外面还有i和n的定义变量  不会漏掉吗

#6


引用 3 楼 ycmjh2010 的回复:
仿块级作用域:
(function(){
    function name(){
      alert('name')
    }
})()

name()//error
jquery在避免和其他库冲突的时候就是这么干的:(function($){//这里的$就不会和其他的冲突咯})(jQuery)


是不是这样写就可以:
(function(我的名字){
任何代码
})(我的名字)

#7


引用 6 楼 yjxf8285 的回复:
引用 3 楼 ycmjh2010 的回复:

仿块级作用域:
(function(){
function name(){
alert('name')
}
})()

name()//error
jquery在避免和其他库冲突的时候就是这么干的:(function($){//这里的$就不会和其他的冲突咯})(jQuery)


是不是这样写就可以:
(function(……
用jq举例是为了说明仿块级作用域,(function($){//})(jQuery)这个写法表示把jQuery传入块作用域里,这样'$'符号就能在块内确保只被jq方法使用。什么效果楼主可以自己试验下,顺带下4楼的方法也不错啊

#8


引用楼主 yjxf8285 的回复:
比如我写了这样一个函数
<script>
var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
var n=n+133;
alert(……

(回复态度:温和)
楼主这不是明显的吃多了撑得么 明知道有歧义 为啥还明知故犯?
自己命个名 加个下划线之类的符号 和别人重的可能性概率是灰常小的

#9


引用 8 楼 fanchuanzhidu 的回复:
引用楼主 yjxf8285 的回复:
比如我写了这样一个函数
<script>
var i=5;
var n=6;
function click(){
n=n+i
time();
name();
}
function time(){
var i=i+11;
var n=i+13;
alert(n);
}
function name(){
var i=i+121;
……


不是吃多了撑的,因为一个项目很多人在写,我们一直也是用自己的名字缩写加下划线的方式避免发生命名冲突,而我总觉得这并不是一个很好的方法,而是一个很笨的方法,所以上来问问,看看大家有什么更方便的方法。

#10


使用有意义的变量名,不要用i,j,m,n这类的。这是常识。只有当确保页面非常简单,完全可控时,可以随便点。既然碰到不能随便的状况,就要用正确的变量使用方法,即科学命名。无所谓笨巧,事实上大巧不工。如果指望用那些某某结构而使你随便滥用变量名,无异于饮鸩止渴。有那工夫,不如避免常识性错误。