Blog icon indicating copy to clipboard operation
Blog copied to clipboard

作用域与闭包 - 词法作用域和动态作用域

Open logan70 opened this issue 5 years ago • 0 comments

词法作用域和动态作用域

什么是作用域

作用域是指程序源代码中定义变量的区域,规定了如何查找变量,也就是确定了当前执行代码对变量的访问权限。

词法作用域

词法作用域 也叫静态作用域,即变量的作用范围在代码编写时就已确定,JavaScript使用词法作用域。

通过下面JavaScript代码例子来理解词法作用域(引自 冴羽的博客 ):

const scope = 'global scope'

function checkscope1(){
    const scope = 'local scope 1'
    function f(){
        return scope
    }
    return f()
}
checkscope1()
// <- 'local scope 1'

function checkscope2(){
    const scope = 'local scope 2'
    function f(){
        return scope
    }
    return f
}
checkscope2()()
// <- 'local scope 2'

动态作用域

动态作用域 即变量的作用范围在代码执行时才能确定,bash是使用动态作用域的语言,可复制前往命令行粘贴查看结果。

value=1
function foo () {
    echo $value;
}
function bar () {
    local value=2;
    foo;
}
bar
# <- 2

logan70 avatar Nov 25 '19 06:11 logan70