局部变量:指的是函数体内的变量,函数体外部无法调用。
function a(){
var b=1;
}
a();
alert(b);
上段函数中,即使已经运行了函数,但因为b是函数内的变量(即局部变量),其他地方无法调用,所以弹出的是undefined
全局变量:指的是在整个javascript文件内都能调用的变量,当然,因为javascript是从上至下执行的,所以需要声明变量后才能调用。
var b=1;
function a(){
alert(b);
}
上段函数中,因为b是在函数外部声明的,且没有被函数包裹,为全局变量,所以下面任意函数都能调用。弹出的是数字1。
闭包:指的是可以调用局部变量的函数。常见的闭包就是在函数体内创建子函数,由子函数调用父函数中的局部变量。例:
function test(){
var x=10;
return function a(){
return x;
}
}
alert(test()());
上段函数中的function a()就是闭包,调用了父函数的局部变量x的值,至于为什么test函数要执行两次才能弹出x值,是因为第一次执行只是返回了a的函数体,再次执行才能将顺利的return x;其实只要知道子函数能调用父函数内的变量即可,老爸的东西给儿子用不是很正常吗,毕竟儿子都是自己的。