好程式設計師web前端學習路線分享web測試之Js中的函式

好程式設計師IT發表於2019-08-21

  好程式設計師web前端學習路線分享web測試之Js中的函式 JS中,一般使用函式其實就是為了封裝某些操作,或者把編寫的程式進行模組化的操作。

   .函式的宣告方式

   1.普通的函式宣告

  function box(num1, num2) {

  return num1+ num2;

  }

   2.使用變數初始化函式

  var box= function(num1, num2) {

  return num1 + num2;

  };

   3.使用Function建構函式

  var box= new Function('num1', 'num2' ,'return num1 + num2');

   .作為值的函式

  ECMAScript中的函式名本身就是變數,所以函式也可以作為值來使用。也就是說,不僅可以像傳遞引數一樣把一個函式傳遞給另一個函式,而且可以將一個函式作為另一個函式的結果返回。

  function box(sumFunction, num) {

  return sumFunction(num);

  }

  function sum(num) {

  return num + 10;

  }

  var result = box(sum, 10);

   .函式內部屬性

  在函式內部,有兩個特殊的物件:arguments和this。arguments是一個類陣列物件,包含著傳入函式中的所有引數,主要用途是儲存函式引數。但這個物件還有一個名叫callee的屬性,該屬性是一個指標,指向擁有這個arguments物件的函式。

  function box(num) {

  if (num <= 1) {

  return 1;

  } else {

  return num * box(num-1);

  }

  }

  對於階乘函式一般要用到遞迴演算法,所以函式內部一定會呼叫自身;如果函式名不改變是沒有問題的,但一旦改變函式名,內部的自身呼叫需要逐一修改。為了解決這個問題,我們可以使用arguments.callee來代替。

  function box(num) {

  if (num <= 1) {

  return 1;

  } else {

  return num * arguments.callee(num-1);

  }

  }

  函式內部另一個特殊物件是this,其行為與Java和C#中的this大致相似。換句話說,this引用的是函式據以執行操作的物件,或者說函式呼叫語句所處的那個作用域。PS:當在全域性作用域中呼叫函式時,this物件引用的就是window。

  window.color = '紅色的';

  alert(this.color);

  var box = {

  color : '藍色的',

  sayColor : function () {

  alert(this.color);

  }

  };

  box.sayColor();

  alert(this.color);

   .函式屬性和方法

  ECMAScript中的函式是物件,因此函式也有屬性和方法。每個函式都包含兩個屬性:length和prototype。其中,length屬性表示函式希望接收的命名引數的個數。

  function box(name, age) {

  alert(name + age);

  }

  alert(box.length);

  function box(num1, num2) {

  return num1 + num2;

  }

  function sayBox(num1, num2) {

  return box.apply(this, [num1, num2]); }

  function sayBox2(num1, num2) {

  return box.apply(this, arguments);

  }

  alert(sayBox(10,10));

  alert(sayBox2(10,10));

  call()方法於apply()方法相同,他們的區別僅僅在於接收引數的方式不同。對於call()方法而言,第一個引數是作用域,沒有變化,變化只是其餘的引數都是直接傳遞給函式的。

  function box(num1, num2) {

  return num1 + num2;

  }

  function callBox(num1, num2) {

  return box.call(this, num1, num2);

  }

  alert(callBox(10,10));

  var color = '紅色的';

  var box = {

  color : '藍色的'

  };

  function sayColor() {

  alert(this.color);

  }

  sayColor();

  sayColor.call(this);

  sayColor.call(window);

  sayColor.call(box);

  當我們使用call(box)方法的時候,sayColor()方法的執行環境已經變成了box物件。

  使用call()或者apply()來擴充作用域的最大好處,就是物件不需要與方法發生任何耦合關係耦合,就是互相關聯的意思,擴充套件和維護會發生連鎖反應。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2654453/,如需轉載,請註明出處,否則將追究法律責任。

相關文章