JavaScript範圍和閉包

來源:互聯網
上載者:User

標籤:區別   cal   note   img   技術   lob   範圍   範圍鏈   global   

以下內容針對ES5

一,先說下變數提升:

1,全域執行內容中(一段script):變數定義,函式宣告(執行之前)

console.log(a) //undefinedvar a = 20;

以上代碼等同於:

var a; //變數提升到全域執行內容頂部,預設值為undefinedconsole.log(a); //undefineda = 20;

再看函式宣告:

fn(‘zs‘) //zs 20function fn(name) {    age = 20;    console.log(name, age);    var age;}

以上代碼等同於:

function fn(name) { //函式宣告整體提升到全域執行內容的頂部    var age;//變數提升到函數執行內容頂部    age = 20;    console.log(name, age);}fn(‘zs‘) //zs 20
備忘:還是要規範編寫函數。不推薦上述寫法,要先定義後執行,增加可讀性。另外,注意函式宣告和函數運算式的區別,函式宣告可以在定義之前執行,函數運算式不可以,會報錯。Uncaught TypeError: fn1 is not a function

2,函數執行內容中:變數定義,函式宣告,this,arguments(執行之前)

二,JS範圍:1,沒有塊級範圍
// 沒有塊級範圍if(true) {    var name = ‘lily‘}console.log(name); //lily

以上代碼等同於如下代碼(推薦如下寫法):

var name;if(true) {    name = ‘lily‘;}console.log(name); //lily
2,只有函數和全域範圍範圍鏈:在試圖訪問一個變數時,JS引擎會從當前範圍開始向上尋找直到Global全域範圍停止,範圍組成的有序集合就成為範圍鏈。三,this的幾種不同使用情境注意:this要在執行時才能確認值,定義時無法確認1,作為建構函式執行2,作為普通函數執行3,作為對象屬性執行4,call,apply,bind四,閉包未完待續...

JavaScript範圍和閉包

聯繫我們

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