javascript之预编译

        Javascript按照<script>段的方式进行预编译处理相关的代码段,并且按照先预定义变量,再预定义函数的方式进行预编译!而且无论变量/函数在段中的任何地点进行显式声明(在变量前加var),都会在所有代码执行前进行预编译,并且变量的值初始为undefined,下面我们使用示例代码来说明整体的预编译情况:
        <script>

                var aa = "dd";

                function bb() {

                     alert(aa);

                    var aa = "cc";

                   alert(aa);

                }

                bb();  

       </script>

     上面的代码执行中alert的提示 内容为undefined和cc;为什么会是undefined? 根据预编译原则var aa因为有在bb函数中定义,因此他的作用域就是整个bb函数,而且不管它在bb函数的什么地方定义都会是在函数bb的任何代码执行前进行定义好并且赋初值为undefined;定义好变量后,开始进行代码执行,因为alert(aa)是第一行代码,这时aa=undefined,因为alert显示内容为undefined,而第二行(var aa = "cc")等aa = "cc", 为aa赋值为cc,因此后面的alert就显示为cc;
     

   <script>

                function bb() {

                     alert(aa);

                    aa = "cc";

                   alert(aa);

                }

                bb();  

       </script>

   以上代码会报错(aa未定义),因为第一个alert之类aa未进行显式的定义(var aa);

   <script>

                var aa = "aa";

                function bb() {

                     alert(aa);

                    aa = "cc";

                   alert(aa);

                }

                bb();  

               alert(aa);

       </script>

    

    以上代码返回aa和cc,cc;因为在bb函数中未显式定义变量aa,因此bb函数中访问是函数外层的aa对象,而在bb中改变了aa的值,因此最后外层的aa值变为cc;


   <script>

                function bb() {

                    aa = "cc";

                   alert(aa);

                }

                bb();  

       </script>

      以上代码alert会显示cc,因为cc进行了隐式的定义,因此不会报错.

    

<script>

                var aa = "dd";

                function bb() {

                    alert(this.aa);

                    var aa = "cc";

                   alert(aa);

                }

                bb();  

       </script>

    以上的的结果为:dd和cc,因为this当前的对象为window!

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值