《JavaScript权威指南》中指出:JavaScript变量在声明以前已经可用,JavaScript的这个特性被非正式的称为声明提早(hoisting),即JavaScript函数中声明的全部变量(但不涉及赋值)都被“提早”至函数的顶部。下面咱们从实例中看看:函数
实例1:spa
var aa = "test"; function myFunc(){ console.log('aa值为:'+aa); var aa = "TEST"; } myFunc();
调用函数myFunc() 打印的结果为 undefined ,由于函数做用域的特性,函数中申明的变量(但不涉及赋值)被“提早”至函数的顶部,因此局部变量在整个函数体始终有效,局部变量aa会覆盖掉全局变量aa,所以打印的结果为 undefined ,其运行过程等价于实例2,以下:code
实例2 :blog
var aa = "test"; function myFunc(){ var aa; console.log('aa值为:'+aa); aa = "TEST"; } myFunc();
运行结果以下:ip