变量

36 阅读2分钟
  1. let/const/var 的区别是什么? 参考答案:

var 定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问,有变量提升。 let 定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问,无变量提升,不可以重复声明。 const 用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改,无变量提升(对象和数组依然修改其中的属性,但不建议这么用),不可以重复声明。

  1. 那什么是块级作用域呢? 参考答案:在ES5 的时代, if 或者 for 循环中声明的变量会泄露成全局变量,其次就是 { } 中的内层变量可能会覆盖外层变量。 ES6 中新增了块级作用域。块作用域由 { } 包括起来,if 语句和 for 语句里面的 { } 也属于块作用域。

  2. 说说作用域与作用域链 参考答案: 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。ES6 之前 JavaScript 没有块级作用域,只有全局作用域和函数作用域。ES6 的到来,为我们提供了块级作用域。 作用域链指的是作用域与作用域之间形成的链条。当我们查找一个当前作用域没有定义的变量(自由变量)的时候,就会向上一级作用域寻找,如果上一级也没有,就再一层一层向上寻找,直到找到全局作用域还是没找到,就宣布放弃。这种一层一层的关系,就是作用域链 。