javascript代码实例教程-JavaScript作用域原理(三)――作用域根据函数划分

发布时间:2019-01-24 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-JavaScript作用域原理(三)――作用域根据函数划分脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 一、一个for实例

 

<p id="scoPE3" style="color:red"></p>

复制代码

     VAR pscope3 = document.getElementById(&#39;scope3');

        function scope3() {

            for(var i=0; i<10; i++){ 

               

            }

            echo(pscope3,  i);

        }

        scope3();

复制代码

1、函数在java、C#等语言中,变量i只会在for循环语句中有定义,循环结束,i也就被销毁了。但在JavaScript中,变量i是定义在scope3()活动对象中的,因此在它定义开始,就可以在函数内部访问它。

 

2、打印出的i为“10”。

 

3、函数scope3等效于下面的代码:

 

复制代码

     function scope3() {

            var i;

            for(i=0; i<10; i++){ 

               

            }

            echo(pscope3,  i);

        }        

复制代码

 

 

二、私有作用域的匿名函数

 

复制代码

     function anonymous() {

            var posITion = 'in anonymous';

            (function(){

                for(var i=0; i<10; i++){ 

               

                }

                echo(pscope3, position);//打印显示"in anonymous"

            })();

            //pscope3.innerHTML += i;//报错

        }

        anonymous();

复制代码

1、匿名函数可以用来模仿块级作用域,避免上面的那个问题。

 

2、在for循环外部插入了一个私有作用域。在匿名函数中定义的任何变量,都会在执行结束时被销毁。

 

3、上面的那句注释掉的话,取消注释的话,就会显示错误信息:“ReferenceError: i is not defined”。

 

4、作用域的关系大致如下:

 

 

 

5、position是定义在anonymous函数中的,但可以在匿名函数中打印出来,因为anonymous的作用域包住了匿名函数,在匿名函数中找不到position定义,就往外找。

 

 

 

三、try语句catch部分的特殊情况

 

复制代码

     function capture() {

            var ex = 'in capture';

            try{  

                i;

            }catch(ex){

                var position= 'in catch';

                echo(pscope3, ex); //ReferenceError: i is not defined

                var ex = 'is catching';

                echo(pscope3, position);//in catch

                echo(pscope3, ex);//is catching

            }

            echo(pscope3, position);//in catch

            echo(pscope3, ex); //in capture 不是catch中赋的值

            echo(pscope3, window.ex); //undefined

        }

        capture();

复制代码

1、catch的一个参数ex与capture函数下的局部变量ex同名。

 

2、catch中先打印ex,是错误信息,然后赋值为“is catching”,打印出来,但很奇怪,catch外面打印的ex是“in capture”,并不是里面覆盖的值。

 

3、position在catch中定义,但是可以在catch的外面打印出来。

 

4、window.ex输出的是undefined,也就是说ex不是全局的,因此可以推出catch后面的大括号是普通语句块的性质。

 

5、ex的性质可以视为唯一一个把catch语句块当做块作用域的变量,是catch语句块的局部变量。

 

 

 

 

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-JavaScript作用域原理(三)――作用域根据函数划分全部内容,希望文章能够帮你解决javascript代码实例教程-JavaScript作用域原理(三)――作用域根据函数划分所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。