console.log(a);//function a(){console.log(4);} var a = 1; console.log(a); //1 function a(){console.log(2);} console.log(a); //1 var a = 3; console.log(a);//3 function a(){console.log(4);} console.log(a);//3
这段代码等价于下面的代码
var a; function a(){console.log(2);} function a(){console.log(4);} console.log(a); a = 1; console.log(a); console.log(a); var a = 3; console.log(a); console.log(a);
作用域: 在javaScript中只要是有域都会发生 1.预解析,在预解析中会首先找到var function 参数 ,预解析时,这些都为undefined; 2.逐行解析代码;表达式 = + - * / % ++ .....参数
全局变量、全局函数, 自上而下
函数中: 由里而外
就近原则;
var a = 1; function fn1(){ console.log(a);//undefined; var a = 2; } fn1(); console.log(a);//1
函数里的相当于 var a;
var a = 1; function fn2(){ console.log(a);//1 a = 2; } fn2(); console.log(a);//2
函数里取的是全局的a的值;
a = 2;
就近原则,找到了全局的a;给全局的a重新赋值;
var a = 1; function fn3(a){ console.log(a);//undefined; a = 2; } fn3(); console.log(a);//1
在函数调用时并没有给实参;
函数体有形参,形参多的是undefined;
函数体里的a = 2;是赋给了形参的值;
var a = 1; function fn4(a){ console.log(a);//1 var a = 2; } fn4(a); console.log(a);//1
函数在调用时给了实参;找到了全局的a = 1;函数形参接收;
拿到函数内部的值
function fn5(){ var a = "我要吃大鸡腿~~~"; return a; //在函数内部没有返回值;需要有返回值得时,需要return;这样就可以拿到里面的值; } console.log(fn5());
var str = ""; function fn6(){ var b = "我要吃大鸡腿~~~"; str = b; } fn6(); console.log(str);//我要吃大鸡腿~~~
` function fn7(){ var c = "我要吃大鸡腿~~~"; fn4(c); } fn7();
function fn4(d){ console.log(d);//我要吃大鸡腿~~~ }
`