一、作用域
var x = 0 //全域性變數 x var y = 10 //全域性變數 y var fun1 = function(){ var x = 1 //fun1函式區域性變數 x console.log(x++) console.log(y) } fun1() //輸出 1 10 函式內可以訪問函式上級的變數 console.log(x) //輸出0 函式外部不能呼叫函式內部的區域性變數
二、閉包
<!-- 閉包:有權訪問另一個函式作用域中的變數的函式。大多是在一個函式內部建立另一個函式 --> var x = 0 //全域性變數 x var fun1 = function(){ var x = 1 //fun1函式區域性變數 x function fun2() { console.log(x++) //當x = 1時 x++ = x ; ++x = x+1 } return fun2 //此時fun2就是一個閉包 } var run1 = fun1() run1() //輸出 1 run1() //輸出 2 run1是函式是引用型別,上一步執行run1將變數x改變進而影響這步的輸出 var run2 = run1 run2() //輸出 3 因為run2 = run1 run1和run2是函式屬於引用型別 所以共用一個作用域鏈 run2() //輸出 4 var run3 = fun1() run3() //輸出 1 這裡不是5 run3有自己的作用域鏈 run3() //輸出 2 console.log(x) //輸出 0