美文网首页
JavaScript函数定义和执行的一些理解--词法作用域(静态

JavaScript函数定义和执行的一些理解--词法作用域(静态

作者: 被强煎的饼 | 来源:发表于2019-01-08 18:03 被阅读0次

    1、词法作用域(静态作用域)和动态作用域

    先看个栗子:

    例子1

    var value =1;
    
    function foo(){
        console.log(value)
    }
    
    function bar(){
        var value =2;
        foo()
    }
     
    bar() ==> 输出1 ?2 ?
    

    结果输出打印出来的是:1

    那接下来的就是知识点了:

    JavaScript采用的是词法作用域,也就是函数的作用域在函数定义时就已经决定好;
    相对动态作用域,就是函数的作用域在函数调用时才决定。

    过程分析:
    执行foo函数,在foo函数内部并没有在找到局部变量value,接着就会查找上一层的代码,找到了value是等于1,而不是获取bar函数内部value=2,因为JavaScript采用的是词法作用域(静态作用域),foo函数在外层定义的时候,作用域就已经决定好了。

    同理,假如JavaScript采用的是动态作用域,则会输出的打印结果就会是2了,因为foo函数是在bar函数中被调用,这时候foo函数的作用域包括bar函数内,这样在bar函数内部就能找到变量value。

    那接下来再来一个栗子辅助理解

    例子2

    var scope =“global scope”
    
     function checkscope(){
        var scope =“local scope”
        function f(){
            return scope
        }
        return f();
    }
    
    checkscope() ==>输出是??
    

    输出打印出来的是: local scope
    还是因为JavaScript采用的是词法作用域,函数的作用域基于函数的创建位置

    总结:

    JavaScript函数的执行用到了作用域链,作用域链是在函数定义的时候创建的。这也就是词法作用域的理解关键点。

    参考地址:https://github.com/mqyqingfeng/Blog/blob/master/articles

    相关文章

      网友评论

          本文标题:JavaScript函数定义和执行的一些理解--词法作用域(静态

          本文链接:https://www.haomeiwen.com/subject/tgybrqtx.html