1. 程式人生 > >js快速理解閉包

js快速理解閉包

閉包的特點:
  1. 作為一個函式變數的一個引用,當函式返回時,其處於啟用狀態。
  2. 一個閉包就是當一個函式返回時,一個沒有釋放資源的棧區。
  簡單的說,Javascript允許使用內部函式---即函式定義和函式表示式位於另一個函式的函式體內。而且,這些內部函式可以訪問它們所在的外部函式中宣告的所有區域性變數、引數和宣告的其他內部函式。當其中一個這樣的內部函式在包含它們的外部函式之外被呼叫時,就會形成閉包。

//第1種寫法  
function Circle(r) {  
      this.r = r;  
}  
Circle.PI = 3.14159;  
Circle.prototype.area = function() {  
  return Circle.PI * this.r * this.r;  
}  
  
var c = new Circle(1.0);     
alert(c.area());

//第2種寫法  
var Circle = function() {  
   var obj = new Object();  
   obj.PI = 3.14159;  
     
   obj.area = function( r ) {  
       return this.PI * r * r;  
   }  
   return obj;  
}  
  
var c = new Circle();  
alert( c.area( 1.0 ) );

//第3種寫法  
var Circle = new Object();  
Circle.PI = 3.14159;  
Circle.Area = function( r ) {  
       return this.PI * r * r;  
}  
  
alert( Circle.Area( 1.0 ) );

//第4種寫法  
var Circle={  
   "PI":3.14159,  
 "area":function(r){  
          return this.PI * r * r;  
        }  
};  
alert( Circle.area(1.0) );

//第5種寫法 
var Circle = new Function("this.PI = 3.14159;this.area = function( r ) {return r*r*this.PI;}");  
alert( (new Circle()).area(1.0) );  

相關推薦

js快速理解

閉包的特點:   1. 作為一個函式變數的一個引用,當函式返回時,其處於啟用狀態。   2. 一個閉包就是當一個函式返回時,一個沒有釋放資源的棧區。   簡單的說,Javascript允許使用內部函式---即函式定義和函式表示式位於另一個函式的函式體內。而且,這些內部函式可以

JS深入理解

本文轉載,學習別人總結的知識,一點點提升。 閉包(closure)是Javascript語言的一個難點,也是它的特色,很多高階應用都要依靠閉包實現。 一、變數的作用域 要理解閉包,首先必須理解Javascript特殊的變數作用域。 變數的作用域無非就是兩種:全域性

js中的理解

構建 但是 水平 作用 undefined 可能 技術 自身 復制 閉包是一個比較抽象的概念,尤其是對js新手來說.書上的解釋實在是比較晦澀,對我來說也是一樣.   但是他也是js能力提升中無法繞過的一環,幾乎每次面試必問的問題,因為在回答的時候.你的答案的深度,對術語的理

java程序員理解js中的

log 內部 asc ava scrip java程序員 brush script turn 1.閉包概念:   就是函數內部通過某種方式訪問一個函數內部的局部變量 2.Java中的類似操作 public class Demo{ private sta

帶你一分鐘理解--js面向物件程式設計

上一篇《簡單粗暴地理解js原型鏈--js面向物件程式設計》沒想到能攢到這麼多贊,實屬意外。分享是個好事情,尤其是分享自己的學習感悟。所以網上關於原型鏈、閉包、作用域等文章多如牛毛,很多文章寫得很深入很專業,而我卻喜歡用更簡單方式來解說簡單的事情。 什麼是閉包?  先看一段程式碼:

【學習筆記】深入理解js原型和(3)——prototype原型

既typeof之後的另一位老朋友! prototype也是我們的老朋友,即使不瞭解的人,也應該都聽過它的大名。如果它還是您的新朋友,我估計您也是javascript的新朋友。   在咱們的第一節(深入理解js原型和閉包(1)——一切皆是物件)中說道,函式也是一種物件。他也是屬性的集合,你也可以

【學習筆記】深入理解js原型和(8)——簡述【執行上下文】上

什麼是“執行上下文”(也叫做“執行上下文環境”)?暫且不下定義,先看一段程式碼: 第一句報錯,a未定義,很正常。第二句、第三句輸出都是undefined,說明瀏覽器在執行console.log(a)時,已經知道了a是undefined,但卻不知道a是10(第三句中)。 在一段js程式碼拿過來真正一句一

【學習筆記】深入理解js原型和(9)—— 簡述【執行上下文】下

繼續上一篇文章(https://www.cnblogs.com/lauzhishuai/p/10078231.html)的內容。 上一篇我們講到在全域性環境下的程式碼段中,執行上下文環境中有如何資料: 變數、函式表示式——變數宣告,預設賦值為undefined; this——賦值; 函式宣告

【學習筆記】深入理解js原型和(11)——執行上下文棧

繼續上文的內容。 執行全域性程式碼時,會產生一個執行上下文環境,每次呼叫函式都又會產生執行上下文環境。當函式呼叫完成時,這個上下文環境以及其中的資料都會被消除,再重新回到全域性上下文環境。處於活動狀態的執行上下文環境只有一個。 其實這是一個壓棧出棧的過程——執行上下文棧。如下圖:   可

【學習筆記】深入理解js原型和(12)——簡介【作用域】

提到作用域,有一句話大家(有js開發經驗者)可能比較熟悉:“javascript沒有塊級作用域”。所謂“塊”,就是大括號“{}”中間的語句。例如if語句: 再比如for語句: 所以,我們在編寫程式碼的時候,不要在“塊”裡面宣告變數,要在程式碼的一開始就宣告好了。以避免發生歧義。如: &nbs

【學習筆記】深入理解js原型和(15)——

前面提到的上下文環境和作用域的知識,除了瞭解這些知識之外,還是理解閉包的基礎。 至於“閉包”這個詞的概念的文字描述,確實不好解釋,我看過很多遍,但是現在還是記不住。 但是你只需要知道應用的兩種情況即可——函式作為返回值,函式作為引數傳遞。 第一,函式作為返回值 如上程式碼,bar函式作為返回值,賦

【學習筆記】深入理解js原型和(17)——補this

本文對《深入理解js原型和閉包(10)——this》一篇進行補充,原文連結:https://www.cnblogs.com/lauzhishuai/p/10078307.html 原文中,講解了在javascript中this的各個情況,寫完之後發現還落下一種情況,就此補充。   原文中thi

【學習筆記】深入理解js原型和(18)——補充:上下文環境和作用域的關係

本系列用了大量的篇幅講解了上下文環境和作用域,有些人反映這兩個是一回兒事。本文就用一個小例子來說明一下,作用域和上下文環境絕對不是一回事兒。   再說明之前,咱們先用簡單的語言來概括一下這兩個的區別。 00 上下文環境: 可以理解為一個看不見摸不著的物件(有若干個屬性),雖然看不見

js函式:難點+this的理解

1.函式的定義 1.語法 function functionName(parameters) { 執行的程式碼 } 2.可以通過通過一個表示式定義,函式表示式可以儲存在變數中 var x = function (a, b) {return a * b

徹底理解js中的

閉包是js的一個難點也是它的一個特色,是我們必須掌握的js高階特性,那麼什麼是閉包呢?它又有什麼用呢? 我們都知道,js的作用域分兩種,全域性和區域性,基於我們所熟悉的作用域鏈相關知識,我們知道在js作用域環境中訪問變數的權利是由內向外的,內部作用域可以獲得當前作用域下的變數並且可以獲得當前包含當前作用域的

js中的之我理解

閉包是一個比較抽象的概念,尤其是對js新手來說.書上的解釋實在是比較晦澀,對我來說也是一樣.   但是他也是js能力提升中無法繞過的一環,幾乎每次面試必問的問題,因為在回答的時候.你的答案的深度,對術語的理解以及js內部直譯器的運作方式的描述,都是可以看出你js實際水平的.

[JS]理解

執行環境和作用域 每個函式都有自己的執行環境。當執行流進入一個函式時,函式的環境就會被推入一個環境棧中。而在函式執行之後,棧將其環境彈出,把控制權返還給之前的執行環境。 當代碼在一個環境中執行時,會建立變數物件的一個作用域鏈,保證對執行環境有權訪問

js中的

rip 關於 活動 定義函數 介紹 變量 call 這就是 資源 一、什麽是閉包?“官方”的解釋是:所謂“閉包”,指的是一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。相信很少有人能直接看懂這句話,因為他描述的太學術。我想

理解的含義以及他的使用

var urn 執行 標識 nbsp 函數 返回 con 訪問 1、什麽是閉包,  閉包就是能夠讀取其它函數內部的變量。首先我們來看一段代碼:function a(){ var n = 0; function inc() { n++;

JS進階-的幾種常見形式

++ 常見 spa chain () clas js進階 undefined alert 作用域鏈: //作用域鏈 var a = 1; function test() { var b =2; return a; }