您好,登錄后才能下訂單哦!
JavaScript中閉包含義指的是什么?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
閉包是函數和聲明該函數的詞法環境的組合,當內部函數被保存到外部時,將會生成閉包而閉包會導致原有作用域鏈不釋放,造成內存泄露,但同時閉包也是非常有用的,因為它可以將某些數據與對該數據的操作進行關聯。
例:
function demo() { var name = '張三'; // name 是demo()創建的局部變量 function demo1() { //demo1()是demo()中的內部函數(閉包) console.log(name); // 使用父函數中聲明的變量 } demo1(); }demo();
運行結果
函數demo()中創建一個名為name的局部變量和一個名為demo1()的內部函數。 demo1()函數只能在demo()函數體內使用。 demo1沒有自己的局部變量。但是由于內部函數可以訪問外部函數的變量,所以demo1()可以訪問父函數demo()中聲明的變量名name。但是如果有同名變量 name 在demo1中被定義,則會使用 自己函數中定義的 name。該例子說明嵌套函數可以訪問在其外部作用域中聲明的變量。
如果上面的代碼改成這樣結果會如何?
function demo() { var name = '張三'; function demo1() { console.log(name); } return demo1; } var newDemo = demo(); newDemo();
運行結果
由運行結果可知兩段代碼結果一樣,內部函數demo1()在執行之前被外部函數返回形成閉包,在這種情況下,newDemo()是運行demo時所創建的函數demo1的一個引用,所以當調用newDemo()時,變量名name仍可以傳遞給console.log(name)。
示例
function num(x) { return function(y) { return x + y; };} var num1= num(2); var num2 = num(3); console.log(num1(2));// 4 console.log(num2(2));// 5
運行結果
定義一個函數num(x)用于接收一個參數x并返回一個新函數,這個新函數還接收一個參數y并返回x和y之和;同時又定義了兩個新的值num1,num2都為閉包且傳值分別為2,3.
感謝各位的閱讀!看完上述內容,你們對JavaScript中閉包含義指的是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。