let、const、var块级作用域、变量提升

1、var声明及变量提升机制

无论在哪里声明,都会被当成在当前作用域顶部声明的变量,这就是我们常说的提升机制。

    function getValue(params) {
        if (params) {
          var value = 'blue'
          //代码
          return
        } else {
          return null
        }
        console.log(value) //undefined
      }

这时你可能params的值为true时,才会创建value值。事实上,无论如何变量value都会被创建。在预编译阶段,js引擎会把上面的getValue函数修改成下面这样:

    function getValue(params) {
        var value
        if (params) {
          value = 'blue'
          //代码
          return
        } else {
          return null
        }
        console.log(value) //undefined
      }

2、const和let块级作用域

块级作用域存在于:

  • 函数内部
  • 块中(字符{和}之间的区域)

let声明的用法和var相同。用let代替var来声明变量,就可以把变量的作用域限制在当前代码块中。由于let声明不会被提升,因此开发者通常将let声明语句放在封闭代码块的顶部,以便整个代码块都可以访问。

    function getValue(params) {
        if (params) {
          let value = 'blue'
          //代码
          return
        } else {
          //变量value在此处不存在
          return null
        }
        // 变量value在此处不存在
      }

const声明的是常量,其值一旦被设定后就不可更改。

最佳实践:默认使用const,只在确实需要改变变量的值时使用let。这样就可以在某种程度上实现代码的不可变,从而防止错误的产生。

猜你喜欢

转载自blog.csdn.net/lbPro0412/article/details/88626649