閉包 閉包作用之儲存 一

2021-09-13 02:43:47 字數 1504 閱讀 2574

函式執行形成乙個私有作用域,函式執行完成,開成的這個棧記憶體一般情況下都會自動釋放

函式執行完成,當前私有作用哉(棧記憶體)中的某一部分內容被記憶體以外的其它東西(變數/元素的事件)占用了,當前的棧記憶體就不能釋放掉,也就形成了不銷毀的私有作用域(裡面的私有變數也不會銷毀)

函式內部可以訪問函式外部的變數,

函式外部不可以訪問函式內部的變數

當在函式外部定義乙個變數,變數在函式內部發生了變化,函式內部和外部都能訪問到這個變數

var a = 1;

function fn1()

fn1()

console.log(a) //2

fn():呼叫完函式,就會釋放棧記憶體

f(): 在函式外面有乙個變數接收了這個返回值,此時 當前作用域不能銷毀

function fn() 

}var f = fn();

f(10); //11 正確:11,10+1=10,之後1為2,因為f(10),在函式fn()外面呼叫,故函式fn()裡的棧記憶體不銷毀,i一直存在

fn()(10); //12 正確:11 先執行fn(),之後再執行(10),即f(10),執行fn是重新把所有的流程執行一遍,臨時不銷毀,當返回結果執行完,沒有被占用了,就會釋放掉

f(20); //21 正確:22 //棧記憶體沒有銷毀,20+1

fn()(20); //22 正確:21 第二次執行fn是重新把所有的流程執行一遍,和第一次沒有任何直接的關係,20+2=22

function fn() 

}var f = fn();

f(10); //11

f(20); //22

function fn() 

}var f = fn();

fn()(10); //11

fn()(20); //21

function fn() 

}var f = fn();

fn()(10); //11

f(20); //21

var i = 1;

function fn()

}var f = fn();

f(10); //11

fn()(10); //12

f(20); //23

fn()(20); //24

function fn(i) 

//因為return,所以走不到這一hi

}var f = fn(10);

f(20); //30 正確:30

fn(10)(20); //31 正確:30

f(30); //40 正確:41

fn(20)(10); // 31 正確:30

f(40) //50 正確:52

作用域 閉包

1.js執行順序 語法分析 預編譯 先生成go物件 1.函式執行生成ao物件 2.形參和變數作為ao物件的鍵名,鍵值是undefined 3.實參賦值給形參 4.在函式中找到函式宣告,把函式作為ao物件的屬性名,屬性值為函式體 執行js 作用域 變數作用範圍 1.作用域 變數作用範圍 1 函式作用域...

閉包(2) 閉包的現象與作用

閉包的現象 當內部的函式被儲存在外部時,將會生成閉包。閉包會導致原有的作用域鏈不釋放,造成記憶體洩漏 占用的多了,剩下的就少了 閉包的作用 1.實現公用變數eg 函式累加器 function add return demo var counter add counter counter counte...

閉包 解決閉包問題

1 函式和對其周圍狀態 lexical environment,詞法環境 的引用 在一起構成閉包 closure 2 函式與函式所依賴的上下文環境組成閉包問題。3 閉包指的是 能夠訪問另乙個函式作用域的變數的函式。清晰的講 閉包就是乙個函式,這個函式能夠訪問其他函式的作用域中的變數。var arr ...