1:函数调用 变量声明提前
var name = "小明";
fn();
function fn(){
console.log(name);
var name = "小红";
}
执行这一段代码.结果为 控制台输出 undefined
执行规律如下:
1,在外部定义name变量,这是全局的
2.接着执行 fn() 函数,函数执行在函数定义之前 ,这个不影响函数执行结果.
3.函数内部,看似打印变量在var name 定义之前,我们以为会去函数外部找值为 "小明" 的哪个变量,实则是在函数内部,直接把 name变量提升到 log之前, 变为 var name; 函数已经被定义,只是没有值. 然后进行输出 只能打印undefined ,如果是函数内部没有定义name变量,则会直接输出 "小明" 这个变量值,如果函数内部的 控制台打印 在定义 "小红" 这个变量之后,那么则会打印小红这个变量
2:变量的连续赋值造成的隐患
fn();
console.log(c); //8
console.log(b); //8
console.log(a); //8
function fn(){
var a = b = c = 8;
console.log(c); //8
console.log(b); //8
console.log(a); //报错 a is not defined (a变量未定义)
}