美文网首页
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