JavaScript中变量作用域问题

在写JavaScript或者Node.js的时候

let a = 1

// func 是一个高阶函数
func(() => {
  console.log(a) // 有时候a可以访问到, 有时候a不能访问到
})

func只是高阶函数的一个代指,其可能是形如setTimeout的函数,可能是fs.readFile之类的函数,请不要在意func函数实现。

本问题着重关注的是在回调函数中的某个变量a,在一些高阶函数中可以访问外部变量,在另一些高阶函数中不能。

这是为什么?

阅读 3.9k
3 个回答
新手上路,请多包涵
let a = 1;
let func = () => {
    console.log(a);
};

语法错了吧~

func函数简单贴出来吧

(function () {
        "use strict";
        let a = 1;
        setTimeout(() => {
            console.log(a);
        },100);
    }())

let是块级的,在全局里let a = 1;你可以打印window.a是找不到的,setTimeout调用回调,内部找不到,向父级寻找也是找不到的。
报错-
Block-scoped declarations (let, const, function, class) not yet supported outside strict mode

你把代码贴全,func的上下文

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题