作为一名前端开发,JavaScript简直重要的不行,保持学习的状态。记录一些我觉得需要被记录的东西。
1、下面的代码在控制台会输出什么?
var a = 10;
function test() {
console.log(a);//???
var a = 20;
}
test();
答案是会打印出:undefined
解析:
使用var声明的变量在JavaScript中是会被变量声明提升的,变量声明会被提升到当前作用域的最前端,并在内存中开辟空间,如果没有真正初始化则会被初始化为undefined。
此题中,函数外声明并初始化了一个a为10,此a是全局变量。同时函数内也声明和初始化了a为20,此a为函数作用域内的局部变量,所以函数内的console访问的是局部变量而不是全局变量,由于var变量声明提升到函数顶部,但是变量真正初始化位置不变,所以console时访问的局部变量a已经声明却未真正初始化,则打印出undefined。
2、如果我们使用 let 或 const 代替 var,输出是否相同?
var a = 10;
function test() {
console.log(a);
const a = 20;
}
test();
答案是输出错误:Uncaught ReferenceError: Cannot access ‘a’ before initialization
解析: