var a =10;
function pay(){
a -=3;
console.log(a);//7
}
pay();//7
console.log(a);//7
/*
*函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
*数都会放到作用域的开始处
*1 function pay(){}会提前声明;
*2 var a=10;
*3 pay(); 执行函数
*4 a-=3; a首先会在自己的函数作用域内寻找,没有就在上一层去寻找,一直到找到,如果到
* 最底层也没找到a的声明和赋值,则报错!此时a会找到上一层的 var a=10;全局变量
* 所以a-=3计算时候改变了全局变量的值;a-=3 此时var a =7;全局变量
*5 函数体内 console.log(a) a=7;
*6 外层函数 console.log(a) a=7;
*/
var a = 10;
function test(a){
// 为了方便理解,可以把形参暂时改成b。传参的过程相当于var b = 10;
a -=3;
console.log(a);//7
}
test(a);//7
console.log(a); //10
/*
*函数声明提前;执行js代码前,解析器将当前作用域内声明的所有变量和函
*数都会放到作用域的开始处
*1 function test(a){}会提前声明;
*2 var a=10;
*3 test(a); 执行函数 test(10);
*4 function test(a){} 此时实参将10赋值给函数体的形参a 就是 var a=10;
*5 a-=3 首先在自己函数域内寻找 发现var a=10; 则函数体内的局部变量var a=10-3=7;
*6 函数体内 console.log(a) a=7;
*7 外层函数 console.log(a);首先在自己函数域内寻找 发现var a=10; 则全局变量a=10
*/