我是靠谱客的博主 纯真唇彩,最近开发中收集的这篇文章主要介绍effective javascript(五)——变量作用域(尽量少用全局变量,尽量使用局部变量),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
javascript中创建全局变量十分简单,并不需要特别任何形式的声明就可以被整个程序的所有代码访问。
定义全局变量最大的问题是污染了命名空间,有可能会导致意外的冲突。
同时全局变量不利于代码模块化,容易导致独立组件、之间的耦合。
当然全局变量是必要的,定义的模块也需要暴露一个全局变量供给其他代码调用。
一、全局变量命名冲突
var i,n,sum; //全局变量
function averageScore(teams){
sum = 0;
n = teams.length;
for(i=0;i<n;i++){
sum += score(teams[i]);
}
return sum / n;
}
var i,n,sum; //相同的全局变量
function score(team){
sum = 0;
n = team.players.length;
for(i=0;i<n;i++){
sum += team.players[i].score;
}
return sum;
}
var teams = [{players:[{score:5},{score:3},{score:6}]},{players:[{score:12},{score:1},{score:7}]}];
averageScore(teams) = 4.666666666666667;
function averageScore(teams){
var i,n,sum; //局部变量
sum = 0;
n = teams.length;
for(i=0;i<n;i++){
sum += score(teams[i]);
}
return sum / n;
}
function score(team){
var i,n,sum; //局部变量
sum = 0;
n = team.players.length;
for(i=0;i<n;i++){
sum += team.players[i].score;
}
return sum;
}
var teams = [{players:[{score:5},{score:3},{score:6}]},{players:[{score:12},{score:1},{score:7}]}];
averageScore(teams) = 17;
第一个代码片段由于混乱的全局变量导致结果出现错误。
二、js中只有函数作用域,没有块级作用域(容易出错)
function test(teams){
for(var i = 0; i < teams.length ; i++){
window.console.log(i);
}
window.console.log(i); // 3
}
test([1,2,3]);
for循环外依然可以取到i的值,上面的代码等价于:
function test(teams){
var i;
for(i = 0; i < teams.length ; i++){
window.console.log(i);
}
window.console.log(i); // 3
}
test([1,2,3]);
三、意外创建的全局变量(需要注意)
function swap(array,i,j){
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
swap([5,6,7,8],2,3);
window.console.log(temp) // 7;
swap方法内的temp变量没有使用var进行定义,创建了一个意外的全局变量temp。
function swap(array,i,j){
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
swap([5,6,7,8],2,3);
window.console.log(temp) // undefined;
四、全局变量用法之一
如es5中提供的全局JSON对象。在部分浏览器并没有JSON对象,这时可以自己实现一个全局的JSON对象,来替代没有JSON对象浏览器的实现。
if(!window.JSON){
window.JSON = {
parse: function(){
...
}
stringify: function(){
...
}
}
}
end…
最后
以上就是纯真唇彩为你收集整理的effective javascript(五)——变量作用域(尽量少用全局变量,尽量使用局部变量)的全部内容,希望文章能够帮你解决effective javascript(五)——变量作用域(尽量少用全局变量,尽量使用局部变量)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复