当前位置: 首页 > 知识库问答 >
问题:

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

左丘曦
2023-06-05

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

共有5个答案

伊光赫
2023-06-05

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

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

温凯
2023-06-05

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

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

鲜于煜祺
2023-06-05

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

段兴为
2023-06-05

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

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

韦俊英
2023-06-05

简单来说是两个一起的作用,但是闭包作用大

详细原因

https://segmentfault.com/a/1190000042988629
 类似资料:
  • 本文向大家介绍Javascript变量的作用域和作用域链详解,包括了Javascript变量的作用域和作用域链详解的使用技巧和注意事项,需要的朋友参考一下 工作这几年,js学的不是很好,正好周末有些闲时间,索性买本《js权威指南》,大名鼎鼎的犀牛书,好好的把js深入的看一看。买过这本书的第一印象就是贼厚,不过后面有一半部分都是参考手册。 一:作用域   说起变量第一个要说到的肯定就是作用域,正是因

  • JavaScript 是一种非常面向函数的语言。它给了我们很大的自由度。在 JavaScript 中,我们可以随时创建函数,可以将函数作为参数传递给另一个函数,并在完全不同的代码位置进行调用。 我们已经知道函数可以访问其外部的变量。 但是,如果在函数被创建之后,外部变量发生了变化会怎样?函数会获得新值还是旧值? 如果将函数作为参数传递并在代码中的另一个位置调用它,该函数将访问的是新位置的外部变量吗

  • 本文向大家介绍Python 如何访问外围作用域中的变量,包括了Python 如何访问外围作用域中的变量的使用技巧和注意事项,需要的朋友参考一下 在表达式中引用变量时,Python 会按照如下的顺序遍历各个作用域,寻找该变量: 当前函数作用域 任何外围作用域(比如包含当前函数的其他函数) global 作用域,即代码所在的模块的作用域 如果上述作用域内都找不到变量,就会报 NameError 异常。

  • 本文向大家介绍详解JavaScript作用域、作用域链和闭包的用法,包括了详解JavaScript作用域、作用域链和闭包的用法的使用技巧和注意事项,需要的朋友参考一下 1. 作用域 作用域是指可访问的变量和函数的集合。 作用域可分为全局作用域和局部作用域。 1.1 全局作用域 全局作用域是指最外层函数外面定义的变量和函数的集合。 换言之,这些最外层函数外面定义的变量和函数在任何地方都能访问。 举个

  • 我在Java中的TimerTask遇到了一些问题。基本上,我试图做的是为每个会话计算一些东西,我设置一分钟的时间范围,一旦时间到了,我会提示用户输入是否启动另一个会话。以下是我尝试过的: 但是,run()中的toCont变量出现了一些语法错误。错误消息如下:“封闭范围中定义的局部变量toCont必须是final或有效final”。有什么办法可以解决这个问题吗?谢谢

  • 变量作用域 变量的作用域值的是变量的生命周期和作用范围(全局与局部作用域的区别)。 作用域介绍 静态作用域 静态作用域有称为词法作用域,即指其在编译的阶段就可以决定变量的引用。静态作用域只更变量定义的位置有关与代码执行的顺序无关。 var x = 0; function foo() { alert(x); } function bar() { var x = 20; foo(); }