26.JS函式

東方來客發表於2018-07-09

函式的五種宣告方式.

  1. 具名函式
    function a(x){
        console.log(x);
        return undefined;
    }
    /*console.log()只接受字串,如果不是字串會自動呼叫toString()方法.
    得到"function a(x){console.log(x)}"*/
    複製程式碼
  2. 匿名函式
    var a = function(x)(
        console.log(x)
    )
    複製程式碼
  3. var x = function y(input1,input2){}
    複製程式碼

    和直接宣告具名函式的區別是如果執行console.log(y)會提示 y is not defined.如果執行console.log()則會列印出函式的內容.

  4. window.Function
    q = new Function('x','y','return x+y');
    q(1,2);  //結果為3
    
    var n = 1;
    q = new Function('x','y','return x+'+n+'+y'); 
    q(1,2);         //結果是4
    複製程式碼
  5. 箭頭函式
    f1 = (x,y)=>{return x+y}
    f1(6,6);   //結果是12
    //只有一句語句時可以省略花括號和return
    f2 = (x,y) =>x+y;
    f2(1,2);   //結果是3
    //只有一個引數時小括號也可省略
    f3 = x => x*x;
    f3(3);     //結果是9
    複製程式碼

函式是一段可以反覆呼叫的程式碼塊.

eg:

function triangleArea(h,w){
    var n = h*w;
    var m = n/2;
    return m;
}
triangleArea.call(undefined,1,2);                  //結果是1
複製程式碼

以上就是一個能求三角形面積的函式. 那麼什麼是this,arguments呢?triangleArea.call(undefined,1,2); 中的

  1. undefined就代表this.
  2. 後面的引數就可以用arguments來表示.
下面舉例說明:
f = function(){
    'use strict';
    console.log(this);
    console.log(arguments);
}
複製程式碼

執行f.call(1,2,3);得到如下結果.

26.JS函式
而arguments是一個偽陣列,偽陣列就是長得像陣列,但是原型鏈中無Array.prototype就是偽陣列.它的__proto__指向Object.prototype.

什麼是閉包呢?

var a = 1;
function b(){
    console.log(a);
}
複製程式碼

向上面這種一個函式使用了它範圍外的變數,那麼這個函式與這個變數合稱閉包.

相關文章