zoukankan      html  css  js  c++  java
  • js的预编译机制

     

    1.var定义的是“当前作用域下的一个变量”,当在函数内部不使用var声明时,会被当做全局变量而不是函数内的局部变量(严格模式下还会报错)

    2.js的预编辑:【对定义式函数】直接创建为作用域上的函数变量,并将其值初始化为定义的函数代码逻辑,也就是为其建立了可调用的函数变量。

    3.js的预编辑:【对var定义的变量】 会在开始先全部找出来,并且将初始值设为undefined

    4.【对上面代码的解释】:第一个yournameundefined:js开始解析时获得了第一行的yourname声明和函数内部的yourname声明,也就是说在函数内部的局部变量里yourname是被声明过的,然后他们被赋予undefined(等待进一步赋值),然而在函数内部时调用在前赋值在后,所以显示的是undefined

    5.最后一行仍然是“李战”:js倾向于先在当前作用域中找函数或变量,如果没有的话再到上层去找,以此类推

    最后贴几个很好的例子:

     1     alert(testNum);  
     2     alert('ok');  
     3     testNum = 2;  
     4     //testNum未声明,执行报错。  
     5     alert(testNum);  
     6     alert('ok');  
     7     var testNum = 2;  
     8     //弹出undefined和ok。预编译的时候,声明了变量t;执行到alert(t)这行代码的时候,t尚未被赋值,所以弹出undefined。  
     9     testFunc();  
    10     function testFunc() {}  
    11     alert('ok');  
    12     //弹出ok。预编译的时候,解析了定义式函数语句function testFunc() {},顺利执行。  
    13     testFunc();  
    14     var testFunc = function() {};  
    15     alert('ok');  
    16     //testFunc不是函数,执行报错。预编译的时候,声明了变量testFunc = undefined;执行到testFunc()时,testFunc还等于undefined,不是函数,所以执行testFunc()会报错。  
    17 
    1819 
    20     <script type="text/javascript">  
    21     testFunc();  
    22     alert('first block');  
    23     <!--script-->  
    24     <script type="text/javascript">  
    25     alert('second block');  
    26     <!--script-->  
    27     //弹出second block。因为JS是一段一段执行的,第一段执行到testFunc()的时候报错,整个第一段都不会再执行,第二段正常执行。 
    28 
    29  
  • 相关阅读:
    P1855 榨取kkksc03
    tar.xz格式文件的解压方法(转载)
    mount: unknown filesystem type 'ntfs'(转载)
    rpm安装总结(转载)
    RedHat/CentOS安装五笔输入法(转载)
    centos6中office及中文输入法安装 (转载)
    ubuntu下7z文件的解压方法(转载)
    计算机通信网中最长、最短的概念
    端口号
    Socket调用方式(同步,异步,阻塞,非阻塞)
  • 原文地址:https://www.cnblogs.com/xisitan/p/4318718.html
Copyright © 2011-2022 走看看