这里是在知乎上看到的一个评论,对闭包的一个精简版的理解
/* * @ 2.作用域: * 先说作用域:作用域就是指程序源代码中定义变量的区域 * 作用域规定了如何去查找变量,也就是确定当前执行代码对变量的访问权限 * 在JS中采用了词法作用域也就是静态作用域 * @ 3.静态作用域和动态作用域 * 区别: * 在JS中是采用了词法作用域,函数的作用域在函数定义的时候就决定了, * 而与词法作用域正好相反的就是动态作用域了,函数的作用域是在函数 * 调用的时候定义的。 * @ 4.举例 * 上面的都是关于作用域的概念,下面这个例子很好的解释了什么是词法作用域,先看执行顺序 * * 定义了一个名为value的变量,还有两个函数foo和bar在foo内打印value的值,根据执行顺序 * 可以得知,调用bar函数执行foo函数,先从foo函数内部查找如果有value这个局部变量,打印 * 出结果,没有的话根据书写的位置,查找上面的一层代码,最后得出结果也就是value等于1,打 * 印结果也是为1。(其实就是一个函数作用域链的过程) * * 反观: 动态作用域打印结果这里只讲打印过程 * 调用bar函数,执行foo,查找value局部变量,没有那么ok,调用bar函数作用域,有value * 值为666,好了最后打印结果为6666 */ var value = 1; function foo() { console.log(value) } function bar() { var value = 666; foo() } bar()断点调试gif图