1.函数内部的变量取代全局同名变量
var t = "pp";
function test() {
// 函数内部的变量取代全局同名变量
//执行t的时候,它会先找作用域链对象,由于它定义在函数内部,
//所以这个函数就是它的作用域链的第一个对象
//而在这个对象里又有t的定义,所以t就是局部变量了,它替换了全局变量t
//t只是此时有定义,但并没有赋值,赋值在下一行,所以这里输出了undefined
alert(t);
// var声明提前,定义了没有赋值,是undefined;没有定义的话就是报错;
var t = "aa";
alert(t);
}
test();
2.javascript 没有var的变量都为全局变量,且为window对象的属性
function test() {
//执行这个句的时候它会找作用域对象,这个函数就是作用域链中的第一个对象,
// 但这个对象中没有相关的var语句
// 于里就找作用域链的第二个对象,即全局对象,而全局对象中也没有相关的var语句
//由于没有相关的var语句,js隐式在函数地声明了变量即var all,就是代表全局变量;
all = 30;
alert(all);
}
test();
alert(all);
// window是代表定义了,没有数据就会打印undefined,不会报错;
alert(window.all);