首頁  >  文章  >  web前端  >  js的閉包使用詳解

js的閉包使用詳解

php中世界最好的语言
php中世界最好的语言原創
2018-03-23 15:50:221503瀏覽

這次帶給大家js的閉包使用詳解,js閉包使用的注意事項有哪些,下面就是實戰案例,一起來看一下。

閉包

按中文的意思就是關上一個包的意思。如果我們把函數的作用域當做是一個包的話,那這個字很形象體現了它的作用 。函數的正常的執行流程是當函數中的語句執行完後,程式會自動銷毀這個函數的作用域,但是當一個函數中聲明了另一個函數,並且這個子函數執行時存在引用父函數的變量,就會形成閉包,形象點說就等於把父函數的作用域給關閉了起來,不讓程式去銷毀它。

例如:

function a() {
  var name = "xuxu";
  function b() {
    console.log(name);
  }
  // 此处产生闭包 
  b();
} 
a();

當函數可以記住並存取它所在的作用域鏈時,就產生了閉包當然,大部分的閉包都不是這麼直觀的,因為子函數的呼叫是可以在父函數之外的,例如:

function a() {
  var name = "xuxu";
  function b() {
    console.log(name);
  }
  return b;
} 
var c=a();
// 此处产生闭包 此处的c函数其实就是a函数
c();

透過以上程式碼,我們也可以看出一個閉包的好處,就是我們再全域作用域(此處是widow)下訪問到了局部作用域(a函數)的作用域的值,按正常的詞法作用域是無法這麼做的,但是當我們使用閉包是就可以了。然後我們再看一點我們平時寫的比較多的:

function foo() {
  var a = 2;
  function baz() {
     // 2
    console.log( a ); 
  }
  bar( baz );
}
function bar(fn) {
// 大家快看呀,这就是闭包!
  fn(); 
}

又或者

var fn;
function foo() {
  var a = 2;
  function baz() {
    console.log( a );
  }
  // 将baz分配给全局变量
  fn = baz; 
}
function bar() {
   // 大家快看呀,这就是闭包!
  fn();
}
foo();
// 2
bar();

以上也是閉包,因此在函數內部調用子函數,或者通過何種手段將內部函數傳遞到所在的詞法作用域以外,它都會持有對原始定義作用域的引用,無論在何處執行這個函數都會使用閉包。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

js的作用域與預解析使用詳解

#Vue枚舉類型實作HTML

node+express實作聊天室

#觀察者模式改變頁面金額數的

以上是js的閉包使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn