【闭包】和【作用域链】到底是谁让函数中的变量可以访问外层作用域中的变量?

【闭包】和【作用域链】到底是谁让函数中的变量可以访问外层作用域中的变量?

阅读 2.1k
5 个回答

在js中,访问一个变量会优先在当前作用域中进行查找,如果当前作用域中没有找到,会沿着作用域链向上层作用域查找,直到顶层作用域(浏览器中就是window),如果顶层作用域也没有找到,会抛出变量未定义的错误。

而闭包是利用了这一概念,但本质上还是作用域链的原因

你有犀牛书吗?
书上说闭包是函数对象和作用域组合起来解析变量的机制。

实际就是用到了一个变量,先查找自身有没有声明,如果没有再不断向 parent 作用域查找。

关于你的问题,作用域链。
闭包的作用是在函数外部可以访问到函数内部变量的引用。

闭包是一种编程思想,按这种思想组织起来的代码叫闭包结构,跟编程语言无关。

在js的规范中有一个“词法环境”的概念,它解释了变量的可访问范围。所有实现了js的宿主(无论是浏览器,还是Node.js)都遵循了这个概念。

推荐问题
宣传栏