JavaScript 中的作用域 提升 取值

146 阅读1分钟

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);//我要吃大鸡腿~~~ }

`