首页 > 代码库 > JavaScript 作用域和作用域链

JavaScript 作用域和作用域链

作用域

作用域指的是变量的适用范围 

 

全局作用域

不在任何函数内定义的变量就具有全局作用域

 

局部作用域

在函数内部定义的变量具有局部作用域

var bo=54
function eb(){
  alert(bo)
}
eb()

解:变量bo就处于全局作用域中,能被eb()所访问

 

作用域链

每个变量都有作用域,当你尝试访问一个变量的时候,它会从当前作用域开始向上查找,直到全局作用域,这个查找的路径就可以说是作用域链

<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
window.onload=function(){
  for(var i=1;i<4;i++){
    document.getElementsByTagName("h"+i)[0].onclick=function(){
      alert(i)
    }
  }
}
</script>
<h1>标题一</h1>
<h2>标题二</h2>
<h3>标题三</h3>
</body>
</html>

解:这个是一个for循环取i的问题,那么进行分析,当页面加载的时候进行for循环,给h1,h2,h3分别绑定了一个点击事件,当点击h2标签时,执行匿名函数,匿名函数尝试访问变量i,在当前作用域查找i未果,向上一级作用域访问,找到了变量i,变量i因为for循环,i=3,所以alert(3)。 这就是作用域链的作用

 

JavaScript 作用域和作用域链