javascript函數範圍、閉包以及匿名函數2

來源:互聯網
上載者:User

標籤:ons   局部變數   括弧   函數嵌套   tool   聯絡   函數   java   外部   

接上上次說的補充:http://www.cnblogs.com/zhangmingzhao/p/7740565.html

1.

首先要明確的是js中的基本概念

  1. 範圍
    js主要的範圍形式就是全域範圍函數範圍(局部範圍),沒有塊級範圍,不過在ES6中用let聲明的變數具有塊級範圍的效果。
  2. 執行環境、變數對象
    執行環境分為全域執行環境和函數執行環境,就是當前代碼的執行內容,簡單說就是定義了變數或函數訪問其他資料的許可權,控制著變數和函數的可見度與生命週期,每個執行環境都有一個與之關聯的對象即變數對象,環境中定義的所有變數和函數都儲存在這個對象中。全域環境是最外圍的,而每個函數有自己的執行環境。
  3. 範圍鏈
    代碼在一個環境中執行時就會建立變數對象的一個範圍鏈,範圍鏈前端始終是當前執行環境的變數對象,下一個變數對象來自包含(外部的)環境,全域執行環境的變數對象始終是範圍鏈的最後一個對象,就像洋蔥一樣,如果你願意一層一層剝開它的心,就很好理解了。
  4. 立即執行函數運算式
    ()這括弧有兩種意義,一是指代一個運算式,二是表示函數執行。

    //函數運算式var fuc = function() {};//匿名函數直接執行(立即執行函數運算式)(function(){})();

上面的效果就是很好的建立了一個範圍,可以做到外部範圍中不能夠訪問內部,就好像被屏蔽了一樣。所以上面你在全域環境聲明變數a又在函數環境聲明a兩個就沒什麼聯絡了,兩個處於不同的變數對象內部,雖然名字相同。但是如果你在函數內部不聲明a,而是直接a = 5賦值,則外部的a會改變,這是因為內部通過範圍鏈訪問到外部的變數並賦值。理解了範圍鏈就很好理解這些問題了。
最後,什麼是閉包?,答:就是能訪問局部變數的函數!!方式是如下(實質還是通過範圍鏈)

 
var funcName = function() {    return function() {    }}

 2.

問題應該是javascript函數範圍、閉包以及匿名函數的概念不是很清楚。重點要看一下javascript函數章節。

接下來簡單說一下:1.function iterator(i){}函數名:iterator ;*注意()前面如果沒有iterator就變為匿名函數,調用方法:iterator(參數)

2.(do someting...)()匿名函數必須立即調用否則沒有意義;具名函數可以通過名字調用如上;匿名函數總不能在某個地方用()表示調用了吧,哈哈,瀏覽器不知道你在幹啥。

3.當在2中的dong someting 為一個函數時就構成了一個閉包,兩個或以上函數嵌套函數就組成了閉包,此例子中的外層函數為匿名函數比較特殊,除此之外函數有自己的範圍,以 function iterator(){範圍在這裡}為例,花括弧內為此函數的範圍,(匿名範圍在這裡)(匿名立即調用);

4.

var a = 6;//匿名函數的外部範圍

(function() {//內建函式,也是匿名函數;連個函數嵌套形成閉包,此為匿名函數的範圍,更具體就叫做內部範圍

var a = 5;

console.log(a)//a為5,a的取值方法為一層一層向外找,如果沒有"var a=5"此時a=6
})();

5.function a(){

function b(){//閉包形成

}

}

javascript函數範圍、閉包以及匿名函數2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.