JavaScript 包裝函數的幾種寫法


var a = 2; // 聲明全局變量a
( function foo (globel) {
    var a = 3;
    console.log(a); // 調用局部變量 3
    console.log(globel.a); // 調用全局變量 2
} 
( window ));
console.log(a); // 調用全局變量 2

  第二種寫法和第一種很像:

var a = 2; // 聲明全局變量a
( function foo (globel) {
    var a = 3;
    console.log(a); // 調用局部變量 3
    console.log(globel.a); // 調用全局變量 2
} )( window ); // 后面加這個括號是為了立即執行這個包裝函數,並傳入參數window
console.log(a); // 調用全局變量 2

  第三種是UMD模式(項目中被廣泛使用,盡管這種模式略顯冗長,但是更容易讓人理解):

var a = 2;
  (function iife (def) {
    def(window);   // 2.執行def函數(def是被傳入的函數),調用def函數並傳入參數window.在下方執行代碼塊。
  })(function def (globel) { // 1.將def函數作為參數傳入iife函數。
    var a = 3; 
    console.log(a); // 打印局部變量 3
    console.log(globel.a); // 打印全局變量 2
  });
  console.log(a); // 打印全局變量 2

  topic: 這樣寫的好處是不會污染外部作用域。 比如 function foo () {  ... } 這樣的函數是可以直接在外部調用的; 但是(function foo () { ... })這樣的函數聲明就只能在{ ... }內部調用了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM