函数本身的作用域

函数本身也是一个值,也有自己的作用域。

它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在的作用域无关。

var a = 1;
var x = function () {
    console.log(a);
}

function f() {
    var a = 2;
    x();
}

f() // 1

上面代码中,函数 x 是在函数 f 的外部声明的,所以它的作用域绑定外层,

内部变量 a 不会到函数 f 体内取值,所以输出  1,而不是 2 。

总之,函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域。

同样的,函数体内声明的函数,作用域绑定函数体内部。

function foo() {
    var x = 1;
    function bar() {
        console.log(x);
    }
    return bar;
}

var x = 2;
var f = foo();
f() // 1

上面代码中,函数 foo 内部声明了一个函数 bar ,bar 的作用域绑定 foo 。

当我们在 foo 外部取出 bar 执行时,变量 x  指向的是 foo 内部的 x ,而不是 foo 外部的 x 。

正是这种机制,构成了“闭包”现象。

posted @ 2024-06-03 16:23  ladybug7  阅读(26)  评论(0)    收藏  举报