溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

好程序員web前端學(xué)習(xí)路線分享web測(cè)試之Js中的函數(shù)

發(fā)布時(shí)間:2020-04-07 01:19:56 來(lái)源:網(wǎng)絡(luò) 閱讀:190 作者:wx5d42865f47214 欄目:web開發(fā)

  好程序員web前端學(xué)習(xí)路線分享web測(cè)試之Js中的函數(shù),在JS中,一般使用函數(shù)其實(shí)就是為了封裝某些操作,或者把編寫的程序進(jìn)行模塊化的操作。
  一.函數(shù)的聲明方式
  1.普通的函數(shù)聲明
  function box(num1, num2) {
  return num1+ num2;
  }
  2.使用變量初始化函數(shù)
  var box= function(num1, num2) {
  return num1 + num2;
  };
  3.使用Function構(gòu)造函數(shù)
  var box= new Function('num1', 'num2' ,'return num1 + num2');
  二.作為值的函數(shù)
  ECMAScript中的函數(shù)名本身就是變量,所以函數(shù)也可以作為值來(lái)使用。也就是說(shuō),不僅可以像傳遞參數(shù)一樣把一個(gè)函數(shù)傳遞給另一個(gè)函數(shù),而且可以將一個(gè)函數(shù)作為另一個(gè)函數(shù)的結(jié)果返回。
  function box(sumFunction, num) {
  return sumFunction(num);
  }
  function sum(num) {
  return num + 10;
  }
  var result = box(sum, 10);
  三.函數(shù)內(nèi)部屬性
  在函數(shù)內(nèi)部,有兩個(gè)特殊的對(duì)象:arguments和this。arguments是一個(gè)類數(shù)組對(duì)象,包含著傳入函數(shù)中的所有參數(shù),主要用途是保存函數(shù)參數(shù)。但這個(gè)對(duì)象還有一個(gè)名叫callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)。
  function box(num) {
  if (num <= 1) {
  return 1;
  } else {
  return num box(num-1);
  }
  }
  對(duì)于階乘函數(shù)一般要用到遞歸算法,所以函數(shù)內(nèi)部一定會(huì)調(diào)用自身;如果函數(shù)名不改變是沒有問題的,但一旦改變函數(shù)名,內(nèi)部的自身調(diào)用需要逐一修改。為了解決這個(gè)問題,我們可以使用arguments.callee來(lái)代替。
  function box(num) {
  if (num <= 1) {
  return 1;
  } else {
  return num
arguments.callee(num-1);
  }
  }
  函數(shù)內(nèi)部另一個(gè)特殊對(duì)象是this,其行為與Java和C#中的this大致相似。換句話說(shuō),this引用的是函數(shù)據(jù)以執(zhí)行操作的對(duì)象,或者說(shuō)函數(shù)調(diào)用語(yǔ)句所處的那個(gè)作用域。PS:當(dāng)在全局作用域中調(diào)用函數(shù)時(shí),this對(duì)象引用的就是window。
  window.color = '紅色的';
  alert(this.color);
  var box = {
  color : '藍(lán)色的',
  sayColor : function () {
  alert(this.color);
  }
  };
  box.sayColor();
  alert(this.color);
  四.函數(shù)屬性和方法
  ECMAScript中的函數(shù)是對(duì)象,因此函數(shù)也有屬性和方法。每個(gè)函數(shù)都包含兩個(gè)屬性:length和prototype。其中,length屬性表示函數(shù)希望接收的命名參數(shù)的個(gè)數(shù)。
  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()方法相同,他們的區(qū)別僅僅在于接收參數(shù)的方式不同。對(duì)于call()方法而言,第一個(gè)參數(shù)是作用域,沒有變化,變化只是其余的參數(shù)都是直接傳遞給函數(shù)的。
  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 : '藍(lán)色的'
  };
  function sayColor() {
  alert(this.color);
  }
  sayColor();
  sayColor.call(this);
  sayColor.call(window);
  sayColor.call(box);
  當(dāng)我們使用call(box)方法的時(shí)候,sayColor()方法的運(yùn)行環(huán)境已經(jīng)變成了box對(duì)象。
  使用call()或者apply()來(lái)擴(kuò)充作用域的最大好處,就是對(duì)象不需要與方法發(fā)生任何耦合關(guān)系耦合,就是互相關(guān)聯(lián)的意思,擴(kuò)展和維護(hù)會(huì)發(fā)生連鎖反應(yīng)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI