码迷,mamicode.com
首页 > 编程语言 > 详细

通俗易懂JavaScript作用域(二)

时间:2015-01-20 10:33:38      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

 

 紧接着上篇文章,在上篇的基础上来做一个变形。

 变形一

 先看一下下面的Demo


<span style="font-family:SimSun;font-size:18px;"><script>    
        var a = 1;
        function fn1() {
            alert(a);
            a = 2;
        }
        function fn1(a){
            alert(a);					
            a = 2;
        }
        fn1();

        alert(a);						
        var a = 1;
        function fn1(a){
            alert(a);					
            a = 2;
        }
        fn1();
        alert(a);			           
    </script></span>


 代码分析

 看了一下上述代码,有木有另外一种晕头转向的感觉,这又是何方神圣,看不懂哈!没事,慢慢的来分析。

 还是按照我上篇博客提到的分析的几个步骤,来分析一下。

 1.找点玩意

 在浏览器中解析预先解析的时候,就是先找一些var、function的东西,然后经过PK后放置到一个仓库里面。并且PK的等级是  var——function   function(先来)——function(后来)。经过PK后,仓库中放置的东西如下:

 技术分享

 

  2.逐行解读代码

  经过JS的预解析后,开始从上至下执行代码,当执行到fn1()码的时候,怪异的事情出现了,因为fn1()是调用函数块,所以又开始了上述的两个过程,解析——解读,好了经过解读后,看看仓库中有什么样的变化。

 技术分享

 

 为何会又多出一个a呢?在这次解析中,并没有发现var的出现啊,a前面并没有哈,为何会多出来一个a呢?大家不要忘了,在解析fn1(a)的时候,其中的a就相当于fn1(var a),所以问题就在这里,在此就多出来一个var的效果,所以才会出现上述的结果。


 3.在此执行解析出来的代码

 所以当执行alert(a)时,因为在当初解析的时候赋值为undefined,所以会弹出undefined的窗口。

 执行完后的结果如下

技术分享


 

  接下向下执行,alert(a),这时候就知道记过了吧!弹出的肯定是1哈。

                          未完待续

 




通俗易懂JavaScript作用域(二)

标签:

原文地址:http://blog.csdn.net/luckyzhoustar/article/details/42913237

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!