函數(shù)

概述:函數(shù)是用function修飾一個代碼塊,這個代碼塊一般是抽取對應(yīng)的功能代碼形成對應(yīng)的復(fù)用。在一定程度減少代碼冗余。
函數(shù)的核心思想:封裝(封裝完可以被調(diào)用)

函數(shù)分類:

  • 系統(tǒng)函數(shù)(屬于系統(tǒng)的函數(shù))
  • 內(nèi)置函數(shù)(屬于對應(yīng)的內(nèi)置對象的函數(shù))
  • 自定義函數(shù)(自己定義的函數(shù))

函數(shù)的創(chuàng)建(自定義的函數(shù)創(chuàng)建):

1、匿名創(chuàng)建(沒有定義名字,不具備復(fù)用價值)
//自執(zhí)行代碼
(function(){
    console.log('hello')
})()
2、具名函數(shù)(有名字的函數(shù),具備復(fù)用價值)
function fn(){
    console,log('hello world');
}
fn()
//第二種寫法
var a = function(){
    console.log('你好');
}
a()
3、函數(shù)對象創(chuàng)建(使用new關(guān)鍵詞)
//函數(shù)對象創(chuàng)建方式 里面的參數(shù)是字符串
var fn = new Function('alert("123")')
fn()
函數(shù)的參數(shù)傳遞:
//傳遞參數(shù)
//計算兩數(shù)之和,再函數(shù)聲明的時候他傳遞的參數(shù)是形參(變量名)
function sum(a,b){
    console.log(a+b);
}
//調(diào)用執(zhí)行,傳遞的參數(shù)是實參 一定有對應(yīng)的值
sum(1,2)

//第二種寫法 new Function的方式傳遞參數(shù)
var sum1 = new Function('a','b','alert+(a+b)')
sum1(1,2)

JavaScript的程序預(yù)編譯過程:

概述:預(yù)編譯過程屬于編譯之前做的事情 。

  • 優(yōu)先編譯function
  • 優(yōu)先編譯變量(不會進(jìn)行賦值操作)
console.log(a); //undefined
// a() //報錯 a 不是一個函數(shù) 預(yù)編譯不會編譯賦值操作
//調(diào)用 方法名(實際的參數(shù))
fn()
//具名函數(shù)
/* function 函數(shù)名(參數(shù),...){
執(zhí)行的代碼
} */
    function fn(){
        console.log('hello world');
}
//具名函數(shù)的第二種寫法
var a = function(){
    console.log('你好');
}
//調(diào)用
a()
//在JavaScript中程序運(yùn)行有個預(yù)編譯過程
//他會先去加載對應(yīng)的方法 function修飾的方法 加載對應(yīng)的變量 var修飾的變量(并不會優(yōu)先編譯
賦值)

return關(guān)鍵詞:

概述:return意思為返回,它是用于對應(yīng)的函數(shù)中返回對應(yīng)的數(shù)據(jù)的一個關(guān)鍵詞,當(dāng)你的數(shù)據(jù)返回了那么當(dāng)前這個函數(shù)就沒有意義了,所以當(dāng)前這個函數(shù)在return后面的代碼就不會再執(zhí)行了。

fuction 方法名(形參1,形參2,....){
    相關(guān)操作
    return 數(shù)據(jù)
}

注意

  • 當(dāng)你沒有return關(guān)鍵詞,它也會返回對應(yīng)的數(shù)據(jù),它的返回是在程序執(zhí)行完以后,返回的值為undefined。
  • 沒有指定對應(yīng)的數(shù)據(jù),相當(dāng)沒有return,相當(dāng)于將return關(guān)鍵詞放在最后面
return關(guān)鍵詞的特點:
  1. 它會結(jié)束對應(yīng)的函數(shù),在本身這個函數(shù)的函數(shù)內(nèi)容執(zhí)行了return,那return后面的內(nèi)容將不會再執(zhí)行了。
  2. 我們一般在程序的結(jié)尾返回對應(yīng)的數(shù)據(jù)。
  3. 也可以利用對應(yīng)的retrun的特性幫助我們來對應(yīng)的函數(shù)。
function sum(number1,number2){
    //如果當(dāng)前傳遞的數(shù)不是數(shù)值 那么就結(jié)束這個函數(shù)
    if(typeof number1 != 'number' || typeof number2 != 'number'){
        return
    }
        return number1+number2
}
return 關(guān)鍵詞 和 拋出錯誤(throw new Error())的區(qū)別:
  • return 關(guān)鍵詞只是結(jié)束當(dāng)前的函數(shù)
  • 拋出錯誤是結(jié)束整個程序

函數(shù)的對應(yīng)的運(yùn)行過程:

gc回收機(jī)制:

概述:垃圾回收機(jī)制,不能強(qiáng)制執(zhí)行的,擁有對應(yīng)的運(yùn)行機(jī)制。

gc的兩大回收機(jī)制:
  • 引用計數(shù)法 (針對于引用數(shù)據(jù)類型的,有變量指向當(dāng)前引用就給他+1,當(dāng)這個變量不再指向它就-1,到0就回收了)
  • 標(biāo)記清除法 (針對于值類型有用yes,沒有用 no,當(dāng)你是no的時候就回收)
執(zhí)行機(jī)制:
  • 函數(shù)是在對應(yīng)的方法執(zhí)行棧上執(zhí)行的
  • 打開代碼空間拿出里面的代碼進(jìn)行執(zhí)行
  • 當(dāng)你執(zhí)行完以后對應(yīng)的gc就會把這個內(nèi)容從執(zhí)行棧上移走,對應(yīng)的代碼空間就會還原

arguments:

概述:arguments是函數(shù)的里面的所有參數(shù)的集合,它是一個偽數(shù)組(具備數(shù)組特性,有下標(biāo),有l(wèi)ength(長度))

function fn() {
//所有的函數(shù)都具備arguments arguments特殊的值里面包含所有的參數(shù)
console.log(arguments)
//獲取arguments里面的參數(shù)的第一個 arguments[下標(biāo)] 來獲取對應(yīng)的下標(biāo)的值
console.log(arguments[0]);
//查詢當(dāng)前arguments的長度 arguments.length
console.log(arguments.length);
}
//對應(yīng)的下標(biāo)從0開始 0表示第一個 最大值 對應(yīng)的長度-1 length 當(dāng)前的個數(shù)-1
fn(1, 2, 3, 4, 5)

注意:使用arguments來獲取對應(yīng)的值的時候,我們一般不寫形參。

arguments使用的相關(guān):
  • arguments通過[下標(biāo)],來返回對應(yīng)的元素
  • arguments的length屬性表示傳入?yún)?shù)的個數(shù)

作用域及作用域鏈:

概述:一個變量的作用范圍稱為作用域,在全局聲明的變量就是全局作用域,在函數(shù)內(nèi)聲明的變量它的作用域就是局部作用域(僅在當(dāng)前函數(shù)內(nèi)可用,函數(shù)作用域)

var a = 10 //全局變量 全局作用域
function fn(){
var a = 20 //局部變量 局部作用域
console.log(a) //20
}
console.log(a) //10
作用域鏈:

概述:作用范圍內(nèi)容變量的查找,它是鏈?zhǔn)讲檎?,從局部到全局?/p>

//查找變量的過程 從局部到全局
var a = 10 //全局變量
var c = 50
var b = 60
function fn(){
    // console.log(a); //undefined
    console.log(a); //10
    // var a = 20; //局部
    a = 20; //全局的
    console.log(b);//60
    console.log(c);//undefined
var c = b = 100;
    // console.log(a); //20
    // console.log(a); //20
  (function(){
    // console.log(a); //undefined
    console.log(a); //20
    // var a = 30 //局部
    console.log(b);//100
    console.log(c);//undefined
var c = b = 200
    a = 30 //全局的
    // console.log(a); //30
    // console.log(a); //30
})()
}
    console.log(a); //10
    fn()
    console.log(a); //30
    console.log(b);//200
    console.log(c);//50

函數(shù)的嵌套:

概述:函數(shù)是可以互相嵌套的。

function fn(){
    function fn1(){
        console.log('hello')
        //fn(3) //報錯
    }
    function fn2(){
        console.log('hello')
        function fn3(){
        console.log('hello')
    }
 }
    fn1()
    console.log('world')
}
fn() //hello world

注意:在函數(shù)內(nèi)部可以定義函數(shù)和調(diào)用的函數(shù),函數(shù)內(nèi)部不能調(diào)用優(yōu)先級比自己要低的。

事件驅(qū)動(利用對應(yīng)的事件來調(diào)用對應(yīng)的函數(shù)):

簡單的一個dom操作:

獲取對應(yīng)的dom元素

var 變量 = document.getElementById('對應(yīng)的標(biāo)簽的id屬性')
給對應(yīng)的變量添加點擊事件:
變量名.onclick = 處理函數(shù)

遞歸:

概述:遞歸屬于一個對應(yīng)的算法 所有的算法都是套路。遞歸能做所有循環(huán)能做的事情。

遞歸的三大要素 (O(logn)):
  • 找規(guī)律
  • 找初始值(沒有規(guī)律的已知條件)
  • 自己調(diào)用自己
最后編輯于
?著作權(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)容

  • 函數(shù)概述 用function修飾的一個代碼塊 函數(shù)實際是多行代碼的抽取(多行代碼會構(gòu)成特定的功能)(方法) 函數(shù)的...
    學(xué)習(xí)路上閱讀 135評論 0 1
  • 函數(shù)概述 函數(shù) 實際就是多行代碼的抽取(多行代碼會構(gòu)成特定的功能)(方法) 函數(shù)的優(yōu)點 減少冗余代碼(重復(fù)的代碼放...
    不想掉頭發(fā)的林子閱讀 77評論 0 0
  • 函數(shù) 函數(shù)概述 函數(shù) 實際就是多行代碼的抽?。ǘ嘈写a會構(gòu)成特定的功能)(方法) 函數(shù)的優(yōu)點 減少冗余代碼(重復(fù)的...
    噴火小王八閱讀 161評論 0 1
  • 函數(shù)是一段可以反復(fù)調(diào)用的代碼塊。函數(shù)還能接受輸入的參數(shù),不同的參數(shù)會返回不同的值。 概述 函數(shù)的聲明 JavaSc...
    oWSQo閱讀 1,472評論 0 4
  • 1、概述 1.1函數(shù)申明: 函數(shù)命令(函數(shù)的聲明):function a(){} 函數(shù)表達(dá)式:const a=fu...
    Ann_l閱讀 1,996評論 0 0

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