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);//=>这里它具有了我们所期望的值 }