JS函數(shù)

語(yǔ)法

function 函數(shù)名([形參列表]){
執(zhí)行代碼
}
函數(shù)名([實(shí)參列表])

函數(shù)定義

  • 函數(shù)聲明
    var x=add(2,3);
    function add(number1,number2){
    var sum=number1+number2;
    return sum;
    }

  • 函數(shù)表達(dá)式
    將匿名函數(shù)賦值給變量
    var add= function(number1,number2){
    var sum=number1+number2;
    return sum;
    }
    var x=add(2,3);
    var y=add(2);//實(shí)參數(shù)量小于形參
    var y=add(2,3,4);//實(shí)參數(shù)量多于形參

  • 對(duì)象實(shí)例化(構(gòu)造函數(shù))
    var add=new Function("i","j",return(i+j));

區(qū)別
函數(shù)聲明的方式定義函數(shù)可以在聲明前調(diào)用,而函數(shù)表達(dá)式和實(shí)例化必須在定義函數(shù)后調(diào)用
實(shí)例化的函數(shù)定義方法無(wú)法識(shí)別父函數(shù)的變量
(function(){
var i=10;
var add = new Function("j","console.log(i+j);debugger;")
add(1);})()

2.利用argument進(jìn)行函數(shù)計(jì)算
function add(){
var sum =0,parameter;
for(i=0;i<=arguments.length; i++){
parameter = arguments[i];
sum = sum + parameter;
}
return sum;
}
3.參數(shù)為原始類(lèi)型,值傳遞
function increment(number){
number = number +1;
return number;
}
var a=1;
var x=increment(a);2
a;//1,只傳遞值,原始值不改變

  • 參數(shù)為對(duì)象類(lèi)型,引用傳遞
    function increment(person){
    person.age=person.age+1;
    return person;
    }
    var jerry={name:"jerry",age:9};
    var x=increment(jerry);
    x;
    jerry;//{name:"jerry",age:10}原始值被改變

作用域

  • 變量起作用的范圍


若內(nèi)部沒(méi)有相應(yīng)的作用對(duì)象,則會(huì)作用到外部


  • 作為對(duì)象屬性
    var point{
    x:1,
    y:1,
    move:function(stepX,stepY){
    this.x+=stepX;this即指函數(shù)作用的對(duì)象
    this.y+=stepY;
    }

    point.move(2,1);
    

構(gòu)造函數(shù)

  • 構(gòu)造函數(shù)
    function Point(x,y){
    this.x=x;
    this.y=y;
    this.move=function(stepX,stepY){
    this.x+=stepX;
    this.y+=stepY;
    }
    var point1=new Point(1,1);//{x:1,y:1,move:function(stepX,stepY){}}
    var point2=new Point(1,2);

  • 原型 設(shè)置共用的方法函數(shù)

function Point(x,y){
    this.x=x;
    this.y=y;
  }
  Point.prototype.move=function(stepX,stepY){
     this.x+=stepX;
     this.y+=stepY;
  }
  var point=new point(1,1);
  point.move(2,1);//x:3,y:2
 function Car(type,color){
    this.type=type;
    this.color=color;
    this.status="stop";
    this.light="off";
  }
  //在原型函數(shù)的基礎(chǔ)上創(chuàng)建新的方法
  Car.prototype.start=function(){
    this.status="start";
    this.light="on";
    console.log(this.type+"is"+this.status);
  }
 Car.prototype.stop=function(){
    this.status="stop";
    this.light="off";
  }
  var audi=new Car("audi","sliver");
  var benzi=new Car("benzi","black");
  audi.start;//調(diào)用方法
  benzi.stop;
  audi.status;//訪問(wèn)屬性
  audi.light="off";
  • 構(gòu)造函數(shù)與普通函數(shù)的區(qū)別
    1.本質(zhì)上沒(méi)有區(qū)別
    2.構(gòu)造函數(shù)通常會(huì)有this指定實(shí)例屬性,原型對(duì)象上通常有一些公共方法
    3.構(gòu)造函數(shù)命名通常首字母大寫(xiě)

函數(shù)調(diào)用(this)

調(diào)用模式

  • 構(gòu)造函數(shù)調(diào)用模式

  • 方法調(diào)用模式
    audi.start

  • 函數(shù)調(diào)用模式
    函數(shù)調(diào)用沒(méi)有指明特定對(duì)象時(shí)function(),this指向全局變量即window
    內(nèi)部方法的子函數(shù)無(wú)法調(diào)用到this
    var myNumber ={
    value:1,
    double: function(){
    var that = this;
    var helper = function(){
    that.value=add(that.value,that.value);
    }
    helper();
    }

  • apply(call)調(diào)用模式
    借用其他函數(shù)的方法Function.prototype.apply()
    function Point(x,y){
    this.x= x;
    this.y= y;
    }
    Point.prototype.move=function(x,y){
    this.x+=x;
    this.y+=y;
    }
    var p = new Point(0,0);
    p.move(2,2);
    var circle={x=1,y=1,r=1};
    Point.prototype.apply(circle,[2,1]);//x=3,y=2,z=1

     // Function.prototype.bind()
    var circlemove=Point.prototype.bind(circle,2,1);//綁定函數(shù)不直接執(zhí)行
    setTimeout(circlemove,1000);//延遲執(zhí)行函數(shù)
    

函數(shù)調(diào)用參數(shù)

  • Array-like
    arguments[index]
    arguments[length]
  • arguments.callee

遞歸

  function factorial(i){
      if(i==0){
          return 1;}//遞歸函數(shù)的退出條件
     return i*factorial(i-1);//調(diào)用函數(shù)本身
  }

閉包

  • 屬性隱藏,對(duì)象封裝
    在函數(shù)內(nèi)部含有子函數(shù),子函數(shù)調(diào)用了父函數(shù)的變量


  • 記憶函數(shù)(不懂)
    var factorial=(function(){
    var count=0;
    var fac= function(i){
    count++;
    if(i==0){
    console.log("調(diào)用次數(shù)"+count);
    return 1;}//遞歸函數(shù)的退出條件
    return i*factorial(i-1);//調(diào)用函數(shù)本身
    }
    return fac
    })()

    for (var i=0;i<=10;i++){
       console.log(factorial(i));//調(diào)用函數(shù)
    }
    

First-class function

  • 函數(shù)柯里化curry
    將接受多個(gè)參數(shù)的函數(shù)轉(zhuǎn)為接受單一參數(shù)的函數(shù),返回的的函數(shù)可以接受后續(xù)參數(shù)
  • 回調(diào)
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)定義 函數(shù)聲明 函數(shù)表達(dá)式 函數(shù)實(shí)例化 不同函數(shù)定義方式的區(qū)別: 聲明提前:代碼執(zhí)行前先對(duì)變量定義、函數(shù)聲明進(jìn)...
    angelwgh閱讀 355評(píng)論 0 0
  • 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 (*)解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可以訪問(wèn);函數(shù)表達(dá)式則必須...
    coolheadedY閱讀 454評(píng)論 0 1
  • 一.通過(guò)關(guān)鍵字 function 定義 1.函數(shù)可以通過(guò)聲明定義,也可以是一個(gè)表達(dá)式。1)聲明:function ...
    小甜妮子__閱讀 555評(píng)論 0 0
  • 1.中年男子騎著電動(dòng)三輪車(chē)逆行??斓浇煌房诘臅r(shí)候,發(fā)現(xiàn)前方有倆交警。于是第一反應(yīng)調(diào)轉(zhuǎn)車(chē)頭,誰(shuí)知迎面而來(lái)的摩托車(chē)車(chē)...
    aftertwelve閱讀 183評(píng)論 0 0
  • 隨著喪尸題材電影愈發(fā)的流行,恐怖片的種類(lèi)也越來(lái)越多,這部《釜山行》可以說(shuō)是一部將恐怖血腥與倫理、人性掛鉤的好作品...
    MSJOYCEE閱讀 212評(píng)論 0 0

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