JavaScript深刻之词法做用域和动态做用域

最后,让咱们看一个《JavaScript权威指南》中的例子:bash

var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}
checkscope();复制代码
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}
checkscope()();复制代码

猜猜两段代码各自的执行结果是多少?函数

这里直接告诉你们结果,两段代码都会打印:local scopeui

缘由也很简单,由于JavaScript采用的是词法做用域,函数的做用域基于函数建立的位置。spa

而引用《JavaScript权威指南》的回答就是:code

JavaScript 函数的执行用到了做用域链,这个做用域链是在函数定义的时候建立的。嵌套的函数 f() 定义在这个做用域链里,其中的变量 scope 必定是局部变量,无论什么时候何地执行函数 f(),这种绑定在执行 f() 时依然有效。ip

可是在这里真正想让你们思考的是:作用域

虽然两段代码执行的结果同样,可是两段代码究竟有哪些不一样呢?string

若是要回答这个问题,就要牵涉到不少的内容,词法做用域只是其中的一小部分,让咱们期待下一篇文章————《JavaScript深刻之执行上下文栈》。it

相关文章
相关标签/搜索