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;邮箱:1047626065@qq.com.你们的评论就是我认知知识的最大帮助,就是进步的最好的工具!本人马甲:请叫我"程序员"!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-03-14 23:27  请叫我"程序员"  阅读(738)  评论(0编辑  收藏  举报