閉包,閉包用途,call、apply、bind 的用法

來源:互聯網
上載者:User

標籤:範圍   屬性   傳回值   獨立   OLE   bind   java   pre   his   

什麼是閉包:
“函數”和“函數內部能訪問到的變數(也叫環境)”的總和,就是一個閉包。
JavaScript有兩種範圍:全域範圍和函數範圍。函數內部可以直接讀取全域變數。但是,在函數外部無法讀取函數內部聲明的變數。換言之,如果一個函數,使用了它範圍外的變數,那麼‘這個函數+這個變數’就叫做閉包。

function f1() {  var n = 1;  function f2() {    console.log(n);  }  return f2;} //這段代碼中,函數 f2 和變數 n 的總和就叫做閉包

 

閉包的用途:
1.從外部讀取函數內部的變數。

function f1() {  var n = 9;  function f2() {    console.log(n);  }  return f2;} var result = f1();result(); // 9//這段代碼中,函數f1的傳回值就是函數f2,由於f2可以讀取f1的內部變數,所以就可以在外部獲得f1的內部變數了。

 

2.讓這些變數始終保持在記憶體中。

function f1(n) {  return function () {    return n++;  };}var a1 = f1(1);a1() // 1a1() // 2a1() // 3//這段代碼中,閉包使得內部變數記住上一次調用時的運算結果。

 

3.封裝對象的私人屬性和私人方法。

function f1(n) {  return function () {    return n++;  };}var a1 = f1(1);a1() // 1a1() // 2a1() // 3var a2 = f1(5);a2() // 5a2() // 6a2() // 7//這段代碼中,a1 和 a2 是相互獨立的,各自返回自己的私人變數。

 

call:call 是函數的正常調用方式,並指定上下文 this。
apply:apply 的作用和 call 一樣,只是在調用的時候,傳參數的方式不同。區別是 apply 接受的是數組參數,call 接受的是連續參數。如下代碼:

function add(a,b){    return a+b;}add.call(add, 5, 3); //8add.apply(add, [5, 3]); //8

 

bind:bind 接受的參數跟 call 一致,只是 bind 不會立即調用,它會產生一個新的函數,你想什麼時候調就什麼時候調。如下代碼:

function add(a, b){    return a+b;}var foo1 = add.bind(add, 5,3); foo1(); //8var foo1 = add.bind(add, 5,3); foo1(); //8

 

閉包,閉包用途,call、apply、bind 的用法

相關文章

聯繫我們

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