這道題考察閉包和引用型別物件的知識點:
一般來說函式執行完後它的區域性變數就會隨著函式呼叫結束被銷毀,但是此題foo函式返回了乙個匿名函式的引用(即乙個閉包),它可以訪問到foo()被呼叫產生的環境,而區域性變數i一直處在這個環境中,只要乙個環境有可能被訪問到,它就不會被銷毀,所以說閉包有延續變數作用域的功能。這就好理解為什麼:
f1()
;//0f1(
);//1
一開始認為f1和f2都=foo()是都指向了同乙個function引用型別,所以順理成章就會答錯認為:f2();//2
但其實foo()返回的是乙個匿名函式,所以f1,f2相當於指向了兩個不同的函式物件,所以結果也就順理成章的變為:f2();//0
function
foo()}
var f1 =
foo(),
f2 =
foo();
f1();
f1();
f2();
閉包 訪問基本資料型別和引用型別
訪問乙個基本變數型別 保護基本資料的變數,使其不能直接被訪問 讀,寫 function operatebasevariable function seta any return let opertaebase operatebasevariable 這是乙個物件,物件裡面包含兩個函式 獲取a的值 o...
函式物件和閉包
1.引用 func f1 print f1 f1 print func func func 2.當作容器類元素 lt f1,1,2,3 print lt 0 lt 0 print f1 f1 lt 0 3.當作函式引數 def f2 f2 f1 print f2 f1 f2 f1 f2 f1 f2 ...
014 函式物件和閉包
二 閉包函式 函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用 defadd x,y return x y.func add func 1,2 3 dic dic dic add 1,2 3 deffoo x,y,func return func x,y foo 1,2,add...