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();