1.var happy='huhu'; alert(happy); //定义然后输出,no problem 2.alert(happy); //没有定义,自然不ok 3.happy='huhu'; //直接给一个变量负值也是不会出错,因为这先当于创建了一个全局的变量。隐式声明了一个变量 4.alert(happy); var happy='huhu';//happy==undefined;相当于。var haapy;-->alert(happy)-->happy='huhu'; happy='huhu'//如果不写var的时候还是会出错 5.var happy='huhu'; function show(){ alert(happy);//输出huhu,访问外部的变量 happy='heihei';//虽然这里改变了外部变量,但是函数完以后会回收这里。所以你不停的刷机会是huhu //alert(happy); } show(); 6.var happy='huhu'; function show(){ alert(happy);//undefined,这里在局部查找变量的时候会找到一个声明确为定义的happy。 var happy='heihei'; } show(); 7.var hppay=[1,2,3]; function show(){ if(typeof hppay=='undefined'){ hppay=[]; } alert(hppay.length);//3 happy为array不为undefined } show(); var hppay1=[1,2,3]; function show1(){ if(typeof hppay1=='undefined'){ var hppay1=[]; } alert(hppay1.length);//0 } show1(); //相当于 function show1(){ var happpy; //此时alert(happy)为undefined if(typeof happy1='undefined'){ var happy1=[]; } }; 8.alert(typeof happy);//function function happy(){};//采用函数定义式声明的方法,函数的定义会提前;而采用函数表达式声明的方法,函数的定义,跟采用var声明的局部变量一样,函数声明会提前,但函数定义位置不变, alert(typeof happy1);//undefined var happy1=function(){};//函数表达式的这种写法,相当于声明了一个变量。 9.var happy={name:'huhu'}; function happy(){ alert('执行了'); //报错functon 不是一个函数,为什么这里不能提前了呢? } happy(); //模拟代码如下 alert(happy);//function var happy={name:'huhu'}; alert(happy);//object function happy(){ alert('执行了'); } happy();