函數(shù)

函數(shù)

通過函數(shù)可以封裝任意多條語句,可以在任何地方,任何時候調(diào)用執(zhí)行。

語法:

function functionName() {
      statement
}

聲明函數(shù)

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

函數(shù)聲明

函數(shù)表達式

var printName = function() {
    statement;
}//匿名函數(shù)方式

參數(shù)

函數(shù)可以傳遞多個參數(shù)

沒有傳遞值得命名參數(shù)將自動被賦予undefined值。

arguments

在函數(shù)體內(nèi)可以通過arguments對象來訪問這個參數(shù)數(shù)組,從而獲取傳遞給參數(shù)的每一個參數(shù)。

使用arguments對象的length屬性可以獲知有多少個參數(shù)傳遞給了函數(shù)。
參數(shù)值也可以通過arguments[i]來獲取。

示例:

function howManyArgs() {   
    console.log(arguments.length);
}
howManyArgs('string',45); // 2,傳遞了2個參數(shù)

重載

ECMAScript沒有重載

在其他語言中,可以為一個函數(shù)編寫兩個定義,只要兩個定義的簽名(接受的參數(shù)的類型和數(shù)量)不同就可以。
但是在ECMAScript中函數(shù)沒有簽名,其參數(shù)是包含零個或多個值的數(shù)組來組成的。它所謂的命名參數(shù)只是提供便利,但不是必需的。沒有函數(shù)簽名,就做到無法重載。
如果ECMAScript定義了兩個名字相同的函數(shù),則改名字屬于后定義的函數(shù)

返回值

調(diào)用return后,函數(shù)立即終端并返回結(jié)果,即使后面有語句也不執(zhí)行。
沒有return會呈現(xiàn)undefined。
console.log()本身的執(zhí)行結(jié)果是undefined,其本身沒有返回值。

聲明提前

變量聲明前置

示例:

console.log(a); 
var a = 1;
console.log(a);

結(jié)果為undefined 1。
JavaScript 僅提升聲明,而不提升初始化
上面示例可理解為:

var a;
console.log(a);
a = 1;
console.log(a);

函數(shù)聲明前置

執(zhí)行代碼前會先讀取函數(shù)聲明,即函數(shù)聲明不必放在調(diào)用的前面,它可以放在當(dāng)前作用域的任何位置。
示例:

fn();
function fn() {
return('hello');
}

執(zhí)行過程:
1、找到所有用function聲明的變量
2、將這些變量初始化并賦值
3、開始執(zhí)行代碼fn()
function聲明會在代碼執(zhí)行之前就創(chuàng)建、初始化、賦值

注意

變量聲明和函數(shù)聲明都會提升,函數(shù)聲明提升的優(yōu)先級高于變量聲明提升
示例:

fn()
sum(3,4)
var fn = function(){
    console.log('fn...')
}
function sum(a,b){
    return a + b;
}

可理解為:

var fn
function sum(a,b){
    return a + b;
}
fn()
sum(3,4)
fn = function(){
    console.log('fn...')
}

立即執(zhí)行的函數(shù)表達式

IIFE也稱自執(zhí)行匿名函數(shù),表達式的變量不能從外部訪問。

(function () {
    statements
})();

聲明一個匿名函數(shù),馬上調(diào)用這個匿名函數(shù)
作用:創(chuàng)建一個獨立的作用域,避免了外界訪問此 IIFE 中的變量,而且又不會污染全局作用域。

命名沖突

function fn(fn){
  console.log(fn);

  var fn = 3;
  console.log(fn);
}
fn(10) //10 3

可以寫為

function fn(){
var fn = arguments[0];
  console.log(fn);

  var fn = 3;
  console.log(fn);
}
fn(10) //10 3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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