遵循“预解析,逐行解读”
//预解析,逐行解读
alert(a); //预解析后剩下function a(){alert(4);}
var a=1;
alert(a); //1
function a(){alert(2);}
alert(a); //1
var a=3;
alert(a); //3
function a(){alert(4);}
alert(a); //3
alert(typeof(a)); //number
当a为局部变量时
var a = 1;
function fn1()
{
alert(a); //undefine
var a = 2; //预解析,找到var,局部变量
}
fn1();
alert(a); //1
当a为全局变量时
var a = 1;
function fn1()
{
alert(a); //1
a = 2; //全局变量
}
fn1();
alert(a); //2
和函数形式不一致,调用未传参
var a = 1;
function fn1(a)
{
alert(a); //undefine
a = 2; //全局变量
}
fn1(); //调用的时没有传参,函数里的为undefine
alert(a); //1
和函数形式一致,调用传参
var a = 1;
function fn1(a)
{
alert(a); //1
a = 2; //全局变量
}
fn1(a); //调用的时候传入1
alert(a); //1
自下往上寻找父级变量
var num = 0;
function fn1()
{
num++;
}
function fn2()
{
num++;
}
fn1();
fn2();
alert(num);
取出局部变量
var str = '';
function fn1()
{
var a = '你好';
str = a;
}
fn1();
alert(str);