“所谓解释型语言,就是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。简单说,解释型语言就是边翻译边执行,而编译型语言是先编译后执行,两者的操作过程不同。”“所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条”“Interpreted computing languages are languages whose source code is processed by a software program called an interpreter that reads in the text and immediately acts upon the instructions defined by the text.”那看下下面这段程序——var scope = 'global'; var f = function() { 
  console.log(scope); // 输出undefined 
  var scope = 'f'; 

f();
上面这段程序会输出undefined,原因是执行console.log(scope);时程序会发现函数内的那个变量scope“已经定义但没初始化”。那我的问题就是,如果解释型语言是解释一句执行一句的话,当执行console.log(scope);时它怎么知道函数里有个变量scope?

解决方案 »

  1.   

    undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性
      

  2.   


    js变量声明是放在代码执行之前的
    只需记住:同一片作用域,相同的变量名指代的必定是同一个变量不止这个,还有很多类似看似神奇的,对js机制理解深了自然明白,不理解解释也是枉然
      

  3.   

    JavaScript解析过程可以分为编译和执行两个阶段,也会预编译的,如变量定义,函数定义var f = function() { 
      console.log(scope); // 输出undefined ,预编译,生成变量scope,值为undefined,由于解释性,赋值语句晚于上面那句,就输出undefined了
      var scope = 'f'; 

    楼主研究这个帖子下,包你头更加痛
    http://bbs.csdn.net/topics/390300541
      

  4.   

    这个怎么解释。
    <script>
    //var scope = 'global'; 
     
    var f = function() { 
      console.log(scope); // 输出undefined 
      //var scope = 'f'; 

    f();
      

  5.   

    "读一行,运行一行"这理解本身就是错误的,至少语法检查是有的,遇到错,前面的也不会执行:alert("下面有错,我执行了吗?");
    if(for())
      

  6.   

    感谢各位,但实际上大多数书上讲到这个问题时是不讲“预编译”的。这牵涉到一个概念叫做“提升(hoisting)”。“提升”指的是所有在函数作用域里的变量定义和函数定义都会被提升至作用域代码的最开始处。