理解和運用JavaScript的閉包機制_基礎知識

偉大的愛因斯坦同志說過:“如果你無法向一個 6 歲小孩解釋清楚某問題,那說明你自己都沒整明白”。然而,當我向一個 27 歲的朋友解釋什麼是閉包時,卻徹底失敗了。這原本是國外某哥們兒在 Stack Overflow 上對 JavaScript 閉包所提出的問題。不過既然此問題是在 Stack Overflow 提出的,當然也會有很多高手出來解答,其中有些回答確實是經典,如下面這個:如果在一個外部函數中再定義一個內建函式,即函數嵌套函數,那麼內建函式也可以訪問外部函數中的變數:function

JavaScript的物件導向編程基礎_基礎知識

重新認識物件導向為了說明 JavaScript 是一門徹底的物件導向的語言,首先有必要從物件導向的概念著手 , 探討一下物件導向中的幾個概念: 一切事物皆對象 對象具有封裝和繼承特性 對象與對象之間使用訊息通訊,各自存在資訊隱藏以這三點做為依據,C++ 是半物件導向半面向過程語言,因為,雖然他實現了類的封裝、繼承和多態,但存在非對象性質的全域函數和變數。Java、C# 是完全的物件導向語言,它們通過類的形式組織函數和變數,使之不能脫離對象存在。但這裡函數本身是一個過程,只是依附在某個類上。

深入學習JavaScript中的原型prototype_基礎知識

javascript 是一種 prototype based programming 的語言, 而與我們通常的 class based programming 有很大 的區別,我列舉重要的幾點如下:1.函數是first class object, 也就是說函數與對象具有相同的語言地位2.沒有類,只有對象3.函數也是一種對象,所謂的函數對象4.對象是按 引用 來傳遞的那麼這種 prototype based programming 的語言如何?繼承呢(OO的一大基本要素), 這也便是

JavaScript中的call方法和apply方法使用對比_基礎知識

方法定義call方法: 文法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定義:調用一個對象的一個方法,以另一個對象替換當前對象。 說明: call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的物件內容從初始的上下文改變為由 thisObj 指定的新對象。 如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。apply方法:

詳細解讀JavaScript的跨瀏覽器事件處理_基礎知識

一.關於擷取事件對象FF有點倔強,只支援arguments[0],不支援window.event。這次真的不怪IE,雖然把event作為window的屬性不合規範,但大家都已經默許這個小問題存在了,只有FF這麼多年了還是特立獨行。所以,跨瀏覽器的事件對象擷取有以下兩種方式:帶參的:getEvent : function(event){ return event ? event : window.event; //return event ||

深入解讀JavaScript中的Hoisting機制_基礎知識

hoisting機制javascript的變數聲明具有hoisting機制,JavaScript引擎在執行的時候,會把所有變數的聲明都提升到當前範圍的最前面。先看一段代碼var v = "hello";(function(){ console.log(v); var v = "world";})();這段代碼啟動並執行結果是什麼呢?答案是:undefined這段代碼說明了兩個問題,第一,function範圍裡的變數v遮蓋了上層範圍變數v。代碼做少些變動var v =

淺談JavaScript中setInterval和setTimeout的使用問題_基礎知識

說到setInterval,就不得不提到setTimeout,二者都是用於定時執行某函數,區別在於setTimeout 只執行一次,而setInterval可以一直連續不斷執行下去,典型用法如下:function do_sth() { console.log('Hello...'); }setTimeout(do_sth, 2500); // 2.5 秒後,執行 do_sth 函數(只執行一次)setInterval(do_sth, 3500); // 3.5 秒後,執行 do_sth 函數(

javascript中遞迴函式用法注意點_基礎知識

不做詳細文字說明了,直接寫代碼,很明了。<script> function sum(num){ if(num<=1){return 1;}else{return num*sum(num-1);//return num*arguments.callee(num-1); //指標//return 2;}}var sum1=sum; alert(sum1(2));</script>上面的代碼 在執行時很容易出現問題,執行我們介紹一個方法,arguments.callee,

詳解JavaScript的Polymer架構中的通知互動_基礎知識

Polymer 以訪問器屬性的形式來定義有監聽需求的屬性(沒有監聽需求的屬性依然是普通的屬性形式定義)。模板中還可以採用「::」文法來將屬性雙向同步於目標元素的某個事件,這就是 Angular 中雙向繫結的概念,甚至還要比它更純粹、更貼近原理。  在 properties 中定義的屬性如果沒有添加 notify 並且沒在模板中用到,那麼它就是沒有監聽需求的,於是就會被定義成普通屬性。否則都會被定義成訪問器屬性,下面例子就解釋了這個問題運行<script> var Polymer =

JavaScript的Polymer架構中dom-repeat與VM的相關操作_基礎知識

各種架構都有把一個列表資料繫結到 DOM 上的功能,比如 Angular 會用 ng-repeat 來綁定。那麼 Polymer 呢?其實這個層級的功能屬於架構的擴充功能了,Angular 的 ng-repeat 也只是個 Directive 而已。Polymer 的 dom-repeat 也是這個層級的東西。  在 Polymer 中,一切都是 Directive 的概念。dom-module 用於定義模組,它本身也是一個 Directive。dom-repeat

淺談JavaScript的Polymer架構中的事件綁定_基礎知識

既然是一套完整的前端架構那就一定有提供事件綁定相關的支援。其實在之前的例子中就使用過事件綁定,只是沒有單獨系統地介紹過而已。 Polymer 的事件思想是對事件處理函數儘可能地都命名並定義到 VM 上,我覺得這個做法是在有意地把 VM 這一層隔離出來。  下面這個例子給按鈕和其所在的 Shadow DOM Host 都綁定了個事件,點擊按鈕後兩個事件都會觸發。運行<script> var Polymer = { dom: 'shadow' }; </script><

探討JavaScript中的Rest參數和參數預設值_基礎知識

Rest 參數通常,我們需要建立一個可變參數的函數,可變參數是指函數可以接受任意數量的參數。例如,String.prototype.concat 可以接受任何數量的字串作為參數。使用 Rest 參數,ES6 為我們提供一種新的方式來建立可變參數的函數。我們來實現一個樣本函數 containsAll,用於檢查一個字串中是否包含某些子字串。例如,containsAll("banana", "b", "nan") 將返回true,containsAll("banana", "c", "nan")

淺談JavaScript的Polymer架構中的behaviors對象_基礎知識

localStorage 應是家喻戶曉的?但本機存放區這個家族可遠不止它。以前扯過 sessionStorage,現在還有個神奇的 CacheStorage。它用來儲存 Response 對象的。也就是說用來對 HTTP ,響應做緩衝的。雖然 localStorage 也能做,但是它可能更專業。  CacheStorage 在瀏覽器上的引用名叫 caches 而不是駝峰寫法的 cacheStorage,它定義在 ServiceWorker 的規範中。CacheStorage 是多個 Cache

JavaScript中數群組繼承的簡單樣本_基礎知識

在寫一些庫時經常會用到樹結構的資料,而且一些樹形結構的資料對從根到葉的路徑擷取需求非常高。比如一個網站的整個路由表就是一棵這樣的樹,它的「路徑」實際上就是 URL 中的 path 部分。所以我好幾次都用了喪心病狂的數群組繼承去實現,下面給大家分享下。 在 JavaScript 中,數組也屬於 Object

小議JavaScript中Generator和Iterator的使用_基礎知識

一說到 Generator,大家就會扯上非同步之類是話題。這顯然是被一些奇奇怪怪的東西帶壞了。與 Generator 關係密切的應該是 Iterator 才對,拿 Generator 來處理非同步也許是一些 C# 程式員才會想的事。當然這種用法確實有一套完整的東西,只是我個人不喜歡而已。  非要把 Generator 和非同步聯絡上,唯一的點就是 next 的調用時機。因為 next 可以非同步地調用,所以 Generator 才得以被非同步地濫用。  但我覺得 next

使用AmplifyJS組件配合JavaScript進行編程的指南_基礎知識

事件分發的作用在為頁面添加各類互動功能時,我們熟知的最簡單的做法就是為頁面元素繫結事件,然後在事件處理函數中,做我們想要做的動作。就像這樣的代碼:element.onclick = function(event){ // Do anything.};如果我們要做的動作不複雜,那麼實際邏輯功能的代碼,放在這裡是可以的。如果今後需要修改,再到這段事件處理函數的位置來修改。再進一步,為了做適當的代碼複用,我們可能會把邏輯功能中的一部分分拆到一個函數內:element.onclick =

JavaScript編程中的Promise使用大全_基礎知識

儘管Promise已經有自己的規範,但目前的各類Promise庫,在Promise的實現細節上是有差異的,部分API甚至在意義上完全不同。但Promise的核心內容,是相通的,它就是then方法。在相關術語中,promise指的就是一個有then方法,且該方法能觸發特定行為的對象或函數。Promise可以有不同的實現方式,因此Promise核心說明並不會討論任何具體的實現代碼。先閱讀Promise核心說明的意思是:看,這就是需要寫出來的結果,請參照這個結果想一想怎麼用代碼寫出來吧。起步:用這一種

深入瞭解JavaScript中的Symbol的使用方法_基礎知識

Symbol 是什嗎?Symbols 不是表徵圖,也不是指在代碼中可以使用小圖片:也不是指代其他一些東西的文法。那麼,Symbol 到究竟是什麼呢?七種資料類型JavaScript 在 1997 年被標準化時,就有 6 種資料類型,直到 ES6 出現之前,程式中的變數一定是以下 6 種資料類型之一:    Undefined    Null    Boolean   

深入理解JavaScript中的箭頭函數_基礎知識

從一開始箭頭就是 JavaScript 的一部分,在第一個 JavaScript 中就建議將內聯的指令碼程式碼封裝裹在 HTML 的注釋中,這可以防止那些不支援 JavaScript 的瀏覽器錯誤滴將你的代碼顯示為明文。你也許寫過下面這樣的代碼:<script language="javascript"><!-- document.bgColor = "brown"; // red// --></script> <script

解析JavaScript的ES6版本中的解構賦值_基礎知識

什麼是解構賦值?解構賦值允許你使用類似數組或對象字面量的文法將數組和對象的屬性值賦給一系列變數。這個文法非常簡潔,而且比傳統的屬性訪問更加清晰。在不使用解構賦值的情況下,訪問數組的前三項:var first = someArray[0];var second = someArray[1];var third = someArray[2]; var first = someArray[0];var second = someArray[1];var third =

總頁數: 3271 1 .... 1587 1588 1589 1590 1591 .... 3271 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.