var a = 1;
function fn1(a){ //只声明没有赋值,为undefined
alert(a); //形参为undefined
a = 2; //局部变量赋值为2,改变window中变量需要使用 this
}
fn1(); //undefined //调用的时候没有传入实参
alert(a); //1,使用this:window指向中的a
console.log(a) //1 改变的是局部变量,并没有改变this指向的a
一个函数中没有使用 this 访问变量时(前提是this指向window),访问的变量都是local!!!!!
var a = 1;
function fn1(){
alert(a); //下面才定义a,所以这里将变量提升到作用域顶端。但没有赋值,所以为undefined
var a = 2; //a变量提升,赋值为2
}
fn1();
alert(a); //使用window中的a
var n=999;
function f1(){
alert(n); //函数体内没有声明n,在闭包中寻找,即在定义f1的 环境中 寻找,找到window中的n
}
f1(); // 999
调用函数时不再继续向下执行,而是先去执行函数中内容,所调用函数中内容是同步执行的,例题如下
function test() {
var a = 1;
console.log(a) //!!!!!!第1打印
setTimeout(function() {
console.log(a); //!!!!!!第3打印
a = 3;
}, 1000);
a = 2;
setTimeout(function() {
console.log(a); //!!!!!! 第4打印
a = 4;
}, 3000);
}
test();
console.log(0);//!!!!!!第2打印