警惕javascript变量的全局污染

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了警惕javascript变量的全局污染相关的知识,希望对你有一定的参考价值。

      作用域的概念总是和变量形影不离,它不是javascript语言独有的概念,只是其运用上与其他大型语言略有不同,JavaScript语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于Java基本语句和控制的脚本语言,其设计简单紧凑。

      JavaScript对作用域的运用与其他语言略有不同,然而总体概念是一致的。作用域限定了javascript文档中的各个资源的可用范围,决定了你定义变量的位置。使用一个匿名函数来容纳所需的变量就是个很好的方法。所有在函数中定义的变量都只应该在该函数的作用域内生效。(变量的作用域会自动向下延伸,这是闭包的概念)

再声明全局作用域的变量,无论何时都能被所有函数所使用,这是个非常诱人的特性,但是对全局作用域的过度使用会造成全局作用域污染,这倒是我们用光所有的合适的变量名,也会导致长久占用内存空间,从而很难创建出一个能够长久维护的应用来。所以,对全局作用域的使用一定要少而谨慎。

比如,以下的全局污染示例:

 

 1 //全局作用域污染
 2 varpartyStarter="starlen";
 3 
 4 functionpizzaParty(totalSlices,peopleCount){
 5 "usestrict";
 6 
 7 varfairness=totalSlices*peopleCount;
 8 returnfairness;
 9 }
10 
11 (function(){
12 "usestrict";
13 
14 varbody=document.getElementsByTagName("body")[0];
15 
16 body.innerhtml="‘<p>‘‘<ahref=‘*‘>‘partyStarty(26,18)‘</a>‘+partyStarter+‘</p>‘";
17 })();

 

     全局变量与任何编程语言中的其他东西一样,也有其用途。然而对他的使用尤需谨慎,而且在用之前必须仔细的思量其内容及名称。使用全局变量来设定程序的全局配置数据是个比较好的办法,全局配置包括:基地址(base URL)、目录信息、程序名称,或是一些需要反复使用而重复定义又会造成资源浪费的东西,应该利用每一件东西的长处,而不应该滥用。

现在,我将这个变量移动到了匿名函数之中,以清理该文档的全局作用域。合适的位置看起来也更加顺眼,并且在该函数执行完毕时会立即销毁变量,不会占用内存的宝贵资源。

 

 1 Function  pizzaParty(totalSlices,peopleCount){
 2 "usestrict";
 3 
 4 Var fairness=totalSlices*peopleCount;
 5 Return fairness;
 6 }
 7 
 8 (function(){
 9 "usestrict";
10 
11 varbody=document.getElementsByTagName("body")[0];
12 varpartyStarter="starlen";
13 
14 body.innerHTML="‘<p>‘‘<ahref=‘*‘>‘partyStarty(26,18)‘</a>‘+partyStarter+‘</p>‘";
15 })();

 

以上是关于警惕javascript变量的全局污染的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript错题记录变量定义提升this指针指向运算符优先级原型继承全局变量污染对象属性及原型属性优先级

改善JavaScript程序的188个建议

*防止JS全局污染

防止js全局变量污染方法总结

[转] 防止js全局变量污染方法总结

VS C++警惕项目中文件全局变量冲突!!!!!!!!