JS学习之块作用域
有关于块作用域,想必大家都很了解,就是:
function counting(count){
for(var i=0;i<count;i++){
alert(i);
}
alert(i); //出错?
}
这是一段很简单的代码确实,谁都看的出来这个函数是拿来干什么的,但是很不幸的一点是,这代码在我第一次接触JS的时候也是认为是相同的结果,可是很抱歉,i是有值的而且值就相等于count的值。就是说i在for循环的时候没有被销毁而是保留了下来。按照专业的术语来讲,就是没有所谓的块作用域!
可是这东西看起来也没什么影响对吧?没错,在我看来确实是没什么影响,JS对象的作用域往往是按照函数来划分的,i变量超过了这个函数的作用范围他自然也会被销毁,只不过说在函数里面会留的更久一点,如果你想重新拿来用的话,不用再定义直接在后面赋值便可以拿来用了。也没显得多么的麻烦!但是如果我就是固执一点想让这函数在循环完直接销毁掉呢?也行:
function counting(count){
function (){
for(var i=0;i<count;i++){
alert(i);
}
}();
alert(i); //未定义
}
就如大家的看到的给他一个匿名函数就实现所谓的“块作用域了”,如我们前面所讲的JS对象都是按照函数来划分的。那好,我给for来一个函数不就可以实现了吗!而事实也的确是如此,我当初第一次当这代码觉得很累,但是这样一拆开就知道了:
function counting(count){
var a=function (){
for(var i=0;i<count;i++){
alert(i);
}
};
a();
alert(i); //未定义
}
所谓的私有变量作用域就是把一个匿名函数直接调用!
//个人见解,如有什么错误,希望可以留下你们的评论。本人QQ:1047626065;邮箱:[email protected]你们的评论就是我认知知识的最大帮助,就是进步的最好的工具!本人马甲:请叫我"程序员"!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。