函数的作用域和闭包
作用域
js的作用域和py相似,if while等控制语句并没有自己作用域;而函数是有自己的作用域的;
if (1==1) { var s=12; }; console.log(s);//12 // ---------------------- function f() { var temp=666; }; f(); console.log(temp);//Uncaught ReferenceError: temp is not defined
嵌套函数的作用域:
例1:
var city = 'beijing'; function func() { var city = 'shanghai'; function inner(){ var city = 'shenzhen'; console.log(city); }; inner(); }; func();
例2:
var city = 'beijing'; function Bar(){ console.log(city); } function func(){ var city = 'shanghai'; return Bar; } var ret = func(); ret(); //beijing
闭包:
var city = 'beijing'; function func(){ var city = "shanghai"; function inner(){ // var city = "langfang"; console.log(city); } return inner; } var ret = func(); ret();
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>标题</title> </head> <body> <script> // 函数作用域(js函数作用域和python相似) if (1) { x=10; }; console.log(x); // 10,if无作用域 function f() { y=11; }; // console.log(y); // Uncaught ReferenceError: y is not defined // 嵌套函数作用域 var city='beijing'; function f1() { var city='shanghai'; function f2() { var city='shenzhen'; console.log(city); }; f2(); }; f1(); // 'shenzhen' </script> </body> </html>