var t = 10;
function test(test){
var t = ++test;//t text=11
console.log(t);//11
}
test(t);
console.log(t);//10
/*
*函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
*数都会放到作用域的开始处
*1 function test(t){}会提前声明;
*2 var t=10;
*3 test(t); 执行函数 test(10);
*4 function test(t){} 此时实参将10赋值给函数体的形参test 就是局部变量 var text=10;
*5 var t = ++test; t=11
*6 函数体内 console.log(t) t=11;
*7 外层函数 console.log(t);首先在自己函数域内寻找 发现var t=10; 则全局变量t=10
*/
var t = 10;
function test(test){
t = t + test;
console.log(t);//20
}
test(t);
console.log(t);//20
/*
*函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
*数都会放到作用域的开始处
*1 function test(t){}会提前声明;
*2 var t=10;
*3 test(t); 执行函数 test(10);
*4 function test(t){} 此时实参将10赋值给函数体的形参test 就是局部变量 var test=10;
*5 t = t+test; 此时test=10 t在自己本函数作用域寻找,没找到向上一层寻找,找到全局
* 变量 var t=10; 然后t=t+test=20;此时改变的是全局变量的值 var=20;
*6 函数体内 console.log(t) t=20;
*7 外层函数 console.log(t);首先在自己函数域内寻找 发现var t=20(第五步改变的值);
* 则全局变量t=20
*/
var t = 10;
function test(test){
t = t + test;
console.log(t);//undefined+10=NaN
var t = 3;
}
test(t);
console.log(t);//10
/*
*函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
*数都会放到作用域的开始处
*1 function test(t){}会提前声明;
*2 var t=10;
*3 test(t); 执行函数 test(10);
*4 function test(t){} 此时实参将10赋值给函数体的形参test 就是局部变量 var test=10;
*5 t = t+test; 此时test=10 此时t会在本身函数作用域内寻找,由于var t=3;声明会提前到
* 函数体内的最前面,则var t;声明但没有赋值 t找到的时候,发现t 声明
* 但没有赋值 所以t为undefine 则t=undefine+10=NaN
*6 函数体内 console.log(t) t=undefined;
*7 外层函数 console.log(t);首先在自己函数域内寻找 发现var t=10;
* 则全局变量t=10
*/
function f(){
alert(1);
}
f();
function f(){
alert(10);
}
f();
/*
*函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
*数都会放到作用域的开始处
*1 第一个function f(){}会提前声明;第二个function f(){}也会提前声明
* 但是发现两个函数名相同,则发生覆盖,只保留了第二个function f(){}
*2 f();则alert(10)被打印
*/