一、 看下列代码输出为何?解释原因。
a) 原题:
1. var a; //JavaScript中定义一个变量,没有赋值时,默认为undefined
2. alert(typeof a); // undefined
3. alert(b); // 报错,因为b没有定义。所有,在浏览器的控制台中会报 b is not defined
解读:这个题的考察点就是:JavaScript中定义一个变量(var a;),没有赋值时,默认为undefined;不定义变量(变量b)时没法读取变量的值。
b) 把上代码的进行变化(把第一行和第二行调换一下):
1. alert(typeof a); // undefined
2. var a; //JavaScript中定义(声明)一个变量,会做变量的声明提升。即上面这句话会提升到最上面,当然没有赋值时,默认为undefined
3. alert(b); // 报错,因为b没有定义。所以,在浏览器的控制台中会报 b is not defined
解读:我们发现把原题中的第一行和第二行代码调换位置后,结果一样,这就是JavaScript中变量声明提升:JavaScript中定义(声明)一个变量,会做变量的声明提升(只对声明提升,而不提升赋值),即这三行代码经过预编译后,依然和原题的代码一样,当然,针对变量声明提升,后面还有几个面试题会给大家详解。