素材牛VIP会员
js作用域的问题
 lo***ou  分类:Node.js  人气:772  回帖:4  发布于6年前 收藏
<!DOCTYPE>
<html>
 <head>
  <title> New Document </title>
 </head>
 <body>
  <script>
  function foo(){var a=2;bar()};
  function bar(){console.log(a)};
  foo()
  </script>
 </body>
</html>

为什么会报错,原因是什么

讨论这个帖子(4)垃圾回帖将一律封号处理……

Lv6 码匠
pu***04 交互设计师 6年前#1

js只有函数作用域,一个变量的作用域是在函数声明的时候确定,而不是在函数调用执行时。
函数作用域是一个静态的概念,在函数声明时会构建作用域链,函数执行时在这个作用域链中查找,一直到顶层全局作用域。
问题中提到a变量只在foo函数中定义,bar函数执行的时候会在bar函数的当前作用域中查找,找不到再到其外层函数(非执行它的函数,声明时的外层函数)的作用域中查找,一直到全局作用域,发现没有就会报ReferenceError

Lv3 码奴
逆***动 PHP开发工程师 6年前#2

因为a不是全局变量所以访问不到。主要是超出了作用域。

Lv5 码农
龙***6 UI设计师 6年前#3

通常情况下作用域在函数申明时就定了,和在哪里调用无关

Lv5 码农
陌***4 站长 6年前#4

Javascript 不止有函数(闭包)作用域,还有块级作用域

然而无论何种作用域,所声明的量的作用域都是由定义时所处的环境而非运行时所处的环境决定的。

这也就是说,一个函数能访问哪些量,在定义时就已经确定了。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取