函数本身的作用域

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

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

复制代码
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 @   ladybug7  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示