JavaScript函數(shù)的參數(shù)傳遞

導(dǎo)讀

  • chrome調(diào)式工具
  • 函數(shù)"對(duì)象"
  • add(2)(3)(4)固定參數(shù)個(gè)數(shù)的實(shí)現(xiàn)
  • add(2)(3)(4)...(任意參數(shù)個(gè)數(shù))的實(shí)現(xiàn)(函數(shù)柯里化)
  • 擴(kuò)展:參數(shù)傳遞方式

1.chrome調(diào)式工具

為了方便JavaScript的調(diào)試,簡(jiǎn)單介紹chrome調(diào)試工具。

1.打開chrome瀏覽器,F(xiàn)12打開開發(fā)者工具,選擇sources,打開需要調(diào)試的文件。

  1. 斷點(diǎn)設(shè)置:在代碼左側(cè)通過點(diǎn)擊設(shè)置斷點(diǎn),程序執(zhí)行到此處時(shí)自動(dòng)停止。


    斷點(diǎn)設(shè)置

3.變量監(jiān)測(cè):在圖示框中可以在代碼執(zhí)行過程中監(jiān)測(cè)變量的值。


變量監(jiān)測(cè)

2.函數(shù)“對(duì)象”

這里的變量加了引號(hào),是為了將函數(shù)與變量做一個(gè)對(duì)比,從而便于理解。函數(shù)可以看成一個(gè)function類型的對(duì)象。

    var a=function b(){
      console.log(b);  //打印整個(gè)函數(shù)
      console.log(typeof b); //打印function
      return 0;
    }
    console.log(a()); //打印0
    console.log(a); //打印整個(gè)函數(shù)
    console.log(b); //這句話報(bào)錯(cuò),因?yàn)椴淮嬖赽變量
    console.log(typeof a); //打印function
    console.log(typeof b); //打印undefined

    function c(){
      return 0;
    }
    console.log(c()); //打印0
    console.log(c); //打印整個(gè)函數(shù)
    console.log(typeof c); //打印function

當(dāng)函數(shù)變量作為返回值時(shí):

var sum=0;
function add(x)
{
  sum+=x;
  return add;
}
var a=add(2)(3); //sum=5  a是函數(shù)對(duì)象
var b=a(4); //sum=9  b是函數(shù)對(duì)象
console.log(a); //打印整個(gè)函數(shù)
console.log(b); //打印整個(gè)函數(shù)

3.add(2)(3)(4)固定參數(shù)個(gè)數(shù)的實(shí)現(xiàn)

  • 采用全局變量的形式
var a1,a2,a3;
function fn3(x){
  a1=x;
  return fn4;
}
function fn4(x){
  a2=x;
  return fn5;
}
function fn5(x){
  a3=x;
  return a1+a2+a3;
}
var b=fn3(2)(3)(4);
console.log(b);
  • 采用單個(gè)函數(shù)的形式
function fn(a1){
  var fn1=function(a2){
    var fn2=function(a3){
      return a1+a2+a3;
    }
    return fn2;
  }
  return fn1;
}
var a=fn(2)(3)(4);
console.log(a);

4.add(2)(3)(4)...(任意參數(shù)個(gè)數(shù))的實(shí)現(xiàn)(函數(shù)柯里化)

  • 采用全局變量的形式
var sum=0;
function add(x)
{
  sum+=x;
  return add;
}
var a=add(2)(3); //sum=5
a(4) //sum=9
  • 采用單個(gè)函數(shù)的形式

引入概念:當(dāng)執(zhí)行console.log(<函數(shù)對(duì)象>)來打印整個(gè)函數(shù)時(shí),是調(diào)用的<函數(shù)對(duì)象>.toString()方法返回最后的打印結(jié)果字符串??梢酝ㄟ^重寫<函數(shù)對(duì)象>.toString()方法來實(shí)現(xiàn)我們想要的打印值。

function a(){
  return 1;
}
console.log(typeof a); //打印function
console.log(a); //打印整個(gè)函數(shù)
console.log(a()); //打印1
a.toString=function(){
  return "重寫toString";
}
console.log(typeof a); //打印function
console.log(a); //打印"重寫toString"
console.log(a()); //打印1

add(2)(3)(4)...的實(shí)現(xiàn):

function add(x)
{
  var res=0;
  res+=x;
  function sum(y){
    res+=y;
    return sum;
  }
  sum.toString= function(){return res;} 
  return sum;
}
var a=add(2)(3)(4);
console.log(a); //此處才會(huì)調(diào)用toString方法

5.擴(kuò)展:參數(shù)傳遞方式

  • object類型的概念:
var a={name:"Name"};
b=a;
console.log(a); //Name
console.log(b); //Name
a.name="NewName"
console.log(a); // NewName
console.log(b); //NewName
程序示例
  • 函數(shù)的參數(shù)傳遞方式
function changeName(obj){
  obj.name="GoodName"
  obj={name:"BadName"}
  return obj;
}
var a={name:"Name"};
var b;
b=changeName(a);
console.log(a); //GoodName
console.log(b); //BadName
程序示例
  • 函數(shù)類型
function a(){
}
a.n=function(){
  return "Name";
}
var b=a;
console.log(a.n()); //Name
console.log(b.n()); //Name
console.log(typeof a); //function
console.log(typeof b);//function
a.n=function(){
  return "NewName";
}
console.log(a.n()); //NewName
console.log(b.n()); //NewName
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容