当前位置 博文首页 > NoManCodes的博客:JS基础面试题01--预解析与作用域

    NoManCodes的博客:JS基础面试题01--预解析与作用域

    作者:[db:作者] 时间:2021-08-20 18:47

    下面是面试题

    var a = 123;
    function f1(){
    console.log(a);
    }
    function f2(){
    var a = 456;
    f1();
    }
    f2();
    console.log(a)
    

    输出结果为123,123。
    首先我们先看f2函数,里面定义了一个局部变量a还调用了f1。而f1执行后打印a。那这个a是全局的a还是局部的a呢?这就由函数的调用者决定了。而f1是一个全局函数,调用者是window,所以a自然是全局的a。结果为123。
    再看console.log(a),也就是相当于console.log(window.a)。那这个全局的a有改变过吗?答案是否定的。这段代码只是定义的两次a,而a的作用域是在他定义的时候就确定的。全局的a是123,局部的a是456。
    再看面试题

    var a = 123;
    function f1(){
    console.log(a);
    }
    function f2(){
    var a = 456;
    f1(a);//传入一个变量a
    }
    f2();
    console.log(a)
    

    结果依然是123,123。
    由于f1函数定义时并没有接收参数。所以传入的a无效。如果f1定义时是这样的function f1(a){console.log(a);} 那么结果就为456,123。

    时间如果可以倒流,我想我还是会卯起来蹉跎
    反正就这样吧,我知道我努力过
    ——五月天《一颗苹果》

    cs
    下一篇:没有了