search

Home  >  Q&A  >  body text

javascript - 一道js笔试题

    var x = 0;
    var test = function(){
        x=1;
    }
    test();
    alert(x);
    function test(){
        x = 2;
    }
    test();
    alert(x);

我试了一下输出1,1第二个函数没有执行,请大神讲讲

PHP中文网PHP中文网2901 days ago600

reply all(3)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:02:35

    即涉及到hoisting机制,也涉及到函数声明和函数表达式的区别:

    hoisting机制我就不讲了,详情看链接。
    这道题有两个test函数,前者是函数表达式,后者是函数声明,对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析。
    所以最终Js其实是这样执行代码的,用函数表达式创建的函数会把已编译好的函数声明创建的同名函数覆盖,相当于变量的重新赋值:

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 15:02:35

    函数声明提前...请这样看这道题:

    var x, test;
    function test() {
        x = 2;
    }
    test = function() {
        x = 1;
    }
    test();
    alert(x);
    test();
    alert(x);
    

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 15:02:35

    传送门
    http://segmentfault.com/q/1010000002589542

    reply
    0
  • Cancelreply