《你不知道的js》值函数作用域和块作用域

一、函数中的作用域

定义:属于这个函数的全部变量都可以在整个函数的范围内使用及服用(事实上在嵌套的作用域中也可以使用)。

1.1 函数作用域有什么作用?

  • 隐藏内部实现

    可以把变量和函数包裹在一个函数的作用域中,然后用这个作用域来“隐藏”他们。
    为什么要“隐藏”变量和函数?
    遵循软件设计中,最小特权原则,也叫最小暴露原则。比如某个模块或对象的API设计。
    
  • 规避冲突

    避免同名标识符之间的冲突。
    方式:1、全局命令空间  2、模块管理
    

1.2 块作用域

为什么需要块作用域?

for(var i = 0; i < 10; i++){
    console.log(i);
}

我们在for循环的头部直接定义了变量i,通常是因为只想在for循环内部的上下文中使用i,而忽略了i会被绑定在外部作用域(函数或全局)中的事实。

创建块级作用域的形式有哪些?

  • with
  • try/catch
try {
    undefined(); //执行一个非法操作来强制制造一个异常
} catch(err) {
    console.log(err); //能够正常执行
}
console.log(err); //ReferenceError: err not found
  • let
//let循环
for (let i = 0; i < 10; i++){
    console.log(i);
}
console.log(i); //ReferenceError

for循环头部的let不仅将i绑定到来for循环的块中,事实上它将其重新绑定到了循环的每一个迭代中,确保使用上一个循环迭代结束时的值重新进行赋值。

  • const 值是固定的常量。之后任何试图修改值的操作都会引起错误。

此处评论已关闭