JavaScript闭包与作用域如何区分函数返回与调用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计502个文字,预计阅读时间需要3分钟。
原文:
在你的代码中:
function fun1() { let a = 2; function fun2() { console.log(a); } return fun2; // ← 注意:这里返回的是函数引用,不是执行结果! } const b = fun1(); // ← 此时 b 被赋值为 fun2 函数本身 console.log(b); // → 输出: [Function: fun2]
你得到 [Function: fun2] 完全正确——因为 fun1() 执行后返回的是 fun2 的函数定义(即函数引用),并未自动执行它。此时 b 就是一个可调用的函数,它“记住”了 fun1 内部的 a = 2,这正是闭包的核心表现:内部函数 fun2 持有对外部词法环境(a)的引用,即使 fun1 已执行完毕。
本文共计502个文字,预计阅读时间需要3分钟。
原文:
在你的代码中:
function fun1() { let a = 2; function fun2() { console.log(a); } return fun2; // ← 注意:这里返回的是函数引用,不是执行结果! } const b = fun1(); // ← 此时 b 被赋值为 fun2 函数本身 console.log(b); // → 输出: [Function: fun2]
你得到 [Function: fun2] 完全正确——因为 fun1() 执行后返回的是 fun2 的函数定义(即函数引用),并未自动执行它。此时 b 就是一个可调用的函数,它“记住”了 fun1 内部的 a = 2,这正是闭包的核心表现:内部函数 fun2 持有对外部词法环境(a)的引用,即使 fun1 已执行完毕。

