JavaScript变量声明与变量声明提前

JavaScript变量声明

JavaScript中存储数据的容器称为变量。用关键字和标识符创建新变量的语句,称为变量声明。可以通过关键字var进行变量声明,在ES6中增加了let、const关键字声明变量的语法。

JavaScript变量声明提前

在JavaScript的函数作用域(function scope)是指在函数内var声明的所有变量在函数体内始终是可见的。JavaScript的这个特性被非正式地称为声明提前(hosting),即JavaScript函数里声明的所有变量(但不涉及赋值)都被“提前”至函数体的顶部。

    var scope = "global"; 
    function f() {
      console.log(scope);//=>"undefined"
      var scope = "local";//
      console.log(scope);//=>"local"
    }

由于函数作用域的特性,局部变量在整个函数体内始终是有定义的,也就是说,在函数体内局部变量遮盖了同名全局变量。尽管如此,只有在程序执行到var语句的时候,局部变量才会被真正赋值。因此,上述过程等价于:将函数的变量声明“提前”至函数体顶部,同时变量初始化留在原来的位置:

    var scope = "global";
    function f() {
      var scope;  //在函数顶部声明了局部变量
      console.log(scope);//变量存在,但是其值是“undefined”
      scope = "local";//这里将其初始化并赋值
      console.log(scope);//=>这里它具有了我们所期望的值
    }

  

posted @ 2019-11-11 12:27  请叫我二狗哥  阅读(427)  评论(0编辑  收藏  举报