javascript中的閉包概念簡單介紹
所謂的閉包應該是指: 內部函式讀取當前函式以外的變數,即建立時所處的上下文環境。
[JavaScript] 純文字檢視 複製程式碼function hello(){ var char = "softwhy.com"; function print(){ console.log(char); }; return print(); }
需要注意的是這裡的print函式引用了外部hello函式的char變數,於是在這裡我們能夠返回"softwhy.com"。
這個功能在某種意義上來說,是要歸功於作用域。我們沒有辦法直接訪問char,除非是宣告這個變數的時候沒有帶var。
程式碼例項如:
[JavaScript] 純文字檢視 複製程式碼function hello(){ char = "softwhy.com"; function print(){ console.log(char); }; return print(); }
在這裡hello變成一個閉包。 閉包是一種特殊的物件,它由兩部分構成:函式,以及建立該函式的環境。環境由閉包建立時在作用域中的任何區域性變數組成。
Javscript閉包與this:
需要注意的是讀取this與arguments時,可能是會出問題的。
[JavaScript] 純文字檢視 複製程式碼function hello(){ this.char = "softwhy.com"; function output(){ char = "antzone"; console.log(this.char); }; return output(); }
當然了這個例子並不夠貼切,我們需要一個額外的例子來解釋這個問題,下面引用一個《Javascript高階程式設計》中的一個例子,來說明這個問題。
[JavaScript] 純文字檢視 複製程式碼var name = "The window"; var object = { name: "My Object", getNameFunc: function(){ return function(){ return this.name; } } }; object.getNameFunc()()
只是這種用法實在是,而解決方法便是儲存一個臨時變數that,如之前在《關於Javascript的this的一些知識》一文中所說的。
[JavaScript] 純文字檢視 複製程式碼var name = "The window"; var object = { name: "My Object", getNameFunc: function(){ var that = this; return function(){ return that.name; } } }; object.getNameFunc()()
Javscript 閉包與讀寫變數:
值得注意的是,如果我們沒有處理好我們的變數時,我們也可以修改這些變數。
[JavaScript] 純文字檢視 複製程式碼function hello(){ var char = "hello,world"; return{ set:function(string){ return char = string; }, print: function(){ console.log(char) } } } var say = hello(); say.set('new hello,world') say.print() // new hello world
Javascript 閉包與效能:
引用MDC的說法:
如果不是因為某些特殊任務而需要閉包,在沒有必要的情況下,在其它函式中建立函式是不明智的,因為閉包對指令碼效能具有負面影響,包括處理速度和記憶體消耗。
相關文章
- 簡單介紹JavaScript閉包JavaScript
- javascript閉包概念介紹JavaScript
- javascript遞迴概念簡單介紹JavaScript遞迴
- js清除閉包的通常方式簡單介紹JS
- Redux的簡單概念介紹Redux
- JavaScript 簡單介紹JavaScript
- javascript物件導向程式設計概念簡單介紹JavaScript物件程式設計
- javascript的this用法簡單介紹JavaScript
- 簡單介紹克隆 JavaScriptJavaScript
- javascript物件簡單介紹JavaScript物件
- javascript this指向簡單介紹JavaScript
- javascript加密簡單介紹JavaScript加密
- javascript中的就加號+的用法簡單介紹JavaScript
- javascript的in運算子簡單介紹JavaScript
- javascript過濾陣列中的元素簡單介紹JavaScript陣列
- JavaScript希爾排序簡單介紹JavaScript排序
- javascript constructor簡單介紹JavaScriptStruct
- javascript建立物件簡單介紹JavaScript物件
- javascript arguments用法簡單介紹JavaScript
- javascript 變數簡單介紹JavaScript變數
- javascript簡單模板引擎介紹JavaScript
- javascript作用域簡單介紹JavaScript
- JavaScript 引擎和 Just-in-Time 編譯概念,Hot Function 的簡單介紹JavaScript編譯Function
- javascript中cookie的secure屬性的作用簡單介紹JavaScriptCookie
- javascript閉包簡單程式碼例項JavaScript
- javascript的分號(;)用法簡單介紹JavaScript
- javascript表示式中的運算順序簡單介紹JavaScript
- JavaScript return語句簡單介紹JavaScript
- javascript鏈式呼叫簡單介紹JavaScript
- javascript除法運算簡單介紹JavaScript
- javascript &&和||運算子簡單介紹JavaScript
- javascript方法過載簡單介紹JavaScript
- JavaScript this指向解綁簡單介紹JavaScript
- javascript陣列操作簡單介紹JavaScript陣列
- javascript with()語句用法簡單介紹JavaScript
- javascript匿名函式簡單介紹JavaScript函式
- javascript變數宣告簡單介紹JavaScript變數
- javascript氣泡排序簡單介紹JavaScript排序