函数作用域
JavaScript具有函数作用域,主要具有这几点好处:
- 隐藏内部实现,符合软件设计中的最小特权原则。
- 规避冲突。函数作用域可以当做命名空间隐藏变量,避免暴露到全局作用域发生冲突。
块作用域
虽然函数作用域是JavaScript中最常见的作用域单元,但块作用域在JavaScript中也是存在的,只不过(个人理解)JavaScript中的块作用域只是针对块中的某个变量 来说的。
举例:
java中的块作用域如下,在if块中声明的所有变量都只在if块中有效
| |
JavaScript中的"块作用域"
| |
在如上块中,我们只能说被let声明的变量i 具有块作用域的性质,并不能理解为整个if块都是块作用域,很显然被var声明的变量j在
块外部也是可以被访问到的。
with
with是块作用域中的一个例子,with创建的新作用域只在with块中有效,并且只有被with的这个变量具有块作用域的性质。
try/catch
try/catch中的err变量具有块作用域的性质,并且只有这个变量有这个性质。
let,const
ES6中被let或者被const声明的变量具有块作用域的性质