一、什么是作用域?
作用域scope规定了变量能够被访问的[范围],离开了这个[范围]变量便不能被访问。简单来说:变量在什么地方可以使用,什么地方不可以使用。
作用域的分类
作为作用域分为全局作用域和局部作用域。局部作用域-函数作用域
请看看说说下面的代码输出的结果?为什么呢?
函数里面的变量不能在函数外面访问
局部作用域:只在某个区域内有效。
局部作用域分类
分为函数作用域和块级作用域什么是函数作用域
函数内部就是函数作用域,函数内部定义的变量或者函数,并且定义的变量或者函数只能在函数内部被访问。函数执行结束之后,函数内部定义的变量会被销毁。在函数内部声明的变量或者函数只能在函数内部被访问,外部无法直接访问。总结:函数内部声明的变量,在函数外无法被访问;函数的参数也是函数内部的局部变量;不同函数内部声明的变量无法互相访问;函数执行完毕后,函数内部的变量被清空了。
1.局部作用域分为哪两种?
函数作用域 函数内部 ; 块级作用域{}
2.函数作用域内声明的变量外部能使用吗? 不能使用。
局部作用域-块级作用域
请说说看下面的代码输出的结果?为什么呢?
在{}外面无法访问{}里面通过let关键字定义的变量
什么是块级作用域
块级作用域:
就是使用一对大括号包裹的一段代码,比如函数、判断语句、循环语句,甚至单独的一个{}都可以被看作是一块作用域。在JavaScript中使用{}包裹的代码称为代码块,代码块内部声明的变量外部将【有可能】无法被访问。
let 声明的变量会产生块作用域,var不会产生块作用域;const 声明的常量也会生产块作用域;不同代码块之间的变量无法互相访问;推荐使用let或const。
全局作用域
什么是全局作用域?
script标签和.JS文件的【最外层】就是所谓的全局作用域,在全局作用域中声明的变量,任何其他作用域都可以被访问。 在全局作用域内声明的变量称之为[全局变量]。什么是作用域链?
作用域链:嵌套关系的作用域串联起来形成了作用域链,作用域链本质上是底层的变量查找机制(就近原则、从内到位);简单来讲:里面的函数能够看到外面的变量,外面的变量看不见里面的变量。总结:在函数被执行时,会优先查找当前函数作用域中查找变量。
如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域。