javascript的作用域以及閉包現象
阿新 • • 發佈:2018-07-04
n) 1.5 函數作用域 log var head clas express immediate
1、 詞法作用域
詞法作用域就是定義在詞法階段的作用域,換句話說,也就是js的作用域時在定義階段決定的,和調用無關。
1.1 作用域沿著作用鏈向上查找
<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> <script type="text/javascript"> //引擎執行console.log();在bar()內找不到a,向上查找,foo()也找不到,繼續向上查找,在window全局中查找,找到a;function foo(){ var b = a*2; function bar(c){ console.log(a,b,c) // 2 4 8 } bar(b*2); } var a =2; foo(2) </script> </html>
1.2 函數作用域,定義函數時,會創建自己的氣泡(作用域),外部作用無法直接訪問。
1.3 立即執行函數 IIFE(Immediately Invoked Function Expression)
<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> <script type="text/javascript"> var a = 100; (function foo(){ var a =1; console.log(a); })() console.log(a); //100 </script> </html>
1.4塊級作用域
javascipt沒有塊級作用域,塊級定義的變量會汙染上一級作用域
<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> <script type="text/javascript"> for(vart i=1; i<10; i++){} console.log(i); //10 </script> </html>
1.5 let語法
es6引入let語法可以解決js沒有塊級作用域問題,強行綁定所在作用域
<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> <script type="text/javascript"> for(let i=1; i<10; i++){} console.log(i); //報錯 </script> </html>
1.6 變量提升
javascript的作用域以及閉包現象