函數小知識點

函數的五種聲明方式

方法一:具名函數函數

function f(parameter){
    return undefined
}

函數都會有一個返回值,不寫,默認返回undefined。由於一個函數必需要有一個終止的語句
注意:consol.log()永遠返回undefined,它打印什麼和返回的沒啥關係。this

var a = 1,2        //報錯
var a = (1,2)    //a 的值爲 2
var a = console.log(1);        //a 的值是 undefined
var a = (1, console.log(2))        //a 的值是 undefined

方法二:具名函數給一個參數code

var x = function f(parameter){
    return undefined
}

區別:
方法一:可在全局訪問函數f對象

consol.log(f);     // f(parameter){ return undefined }

方法二:只能在函數內部訪問f,在函數外部沒法訪問。ci

consol.log(f);     // 報錯

方法三:匿名函數字符串

var f = function(parameter){};

匿名函數必須給一個變量it

方法四:window.Function函數對象io

new Funciton('x','y','return x+y')

方法五:箭頭函數console

f = (x,y) => {return x+y;}

箭頭函數是匿名的,只能用變量去存儲。
若是隻有一句語句,花括號和return能夠一塊兒去掉;
若是隻有一個變量,可省略圓括號。function

函數的name屬性

函數有一個屬性————name

function f1(){}
f1.name;            //f,字符串

var f2 = function (){};
f2.name;            //f2,字符串

var f3 = function f4(){};
f3.name;            //f4,字符串

new Function('x','y','return x+y');
f3.name;            //anonymous,字符串

函數的本質

函數是一段能夠反覆調用的代碼塊。

f(1,2) === f.call(undefined,1,2)

f.call()纔是函數的真正調用,模擬下call()的內部。

var f = {};
f.name = 'f';
f.params = ['x','y'];
f.functionBody = 'console.log("fff")'
f.call = function(){
    return eval(f.functionBody);
};
f.call();        //fff

thisargument

f.call(undefined,1,2);        //undefined就是this,[1,2]就是argument

call的第一個參數能夠用this獲得
call的第二個參數能夠用argument獲得

function f(){
    console.log(this);    //this 是參數 1
}
f.call(1);        //Number 對象 1
function f(){
    'use strict';    //嚴格模式
    console.log(this);        //this 是參數 1
}
f.call(1);        //1,嚴格模式模式下參數是啥就打印啥
function f(){
    console.log(this);    //this 是參數 undefined,沒有就是 undefined
}
f.call();        //window,不是字符串;嚴格模式下會打印 undefined
相關文章
相關標籤/搜索