JavaScript關(guān)于函數(shù)

今天是函數(shù)基礎(chǔ)部分!有點(diǎn)心理準(zhǔn)備!
老規(guī)矩,先放思維導(dǎo)圖!
圖片哪里不懂,結(jié)合下面文字對(duì)應(yīng)理解!

javascript05.jpg

認(rèn)識(shí)函數(shù)

在一個(gè)完整的項(xiàng)目中,某些功能會(huì)被反復(fù)的使用到,那么,我們就將該功能封裝進(jìn)一個(gè)函數(shù),當(dāng)要使用該功能時(shí),直接調(diào)用函數(shù)即可。
注意:函數(shù)是對(duì)功能的封裝
優(yōu)點(diǎn)
1.節(jié)省代碼,使程序結(jié)構(gòu)簡(jiǎn)單易懂,提高代碼的重復(fù)度(重復(fù)利用度)
2.如果修改某個(gè)功能,調(diào)試某個(gè)bug,只需要對(duì)應(yīng)修改函數(shù)即可

函數(shù)概述

結(jié)構(gòu)

    function 函數(shù)名(參數(shù)列表) {
        語(yǔ)句
        return 表達(dá)式;
    }

理解
1.function:函數(shù)的關(guān)鍵字,說(shuō)明這是一個(gè)函數(shù);
2.函數(shù)名:遵守標(biāo)識(shí)符的規(guī)則;
3.()參數(shù)列表的開始和結(jié)束
4.參數(shù)列表:是函數(shù)從函數(shù)的調(diào)用者那里獲取的數(shù)據(jù) 可以沒有參數(shù)
5.{}:函數(shù)體的開始和結(jié)束;
6.語(yǔ)句:函數(shù)封裝的功能
7.return 表達(dá)式; :return是給函數(shù)的調(diào)用者返回的數(shù)據(jù)用,返回的數(shù)據(jù)為“表達(dá)式”的值,返回到調(diào)用函數(shù)的地方。
return 表達(dá)式; 可以不顯示的寫出來(lái),如果沒有,我們默認(rèn)返回undefined。
注意:函數(shù)聲明之后不會(huì)被執(zhí)行,只是聲明了而一個(gè)有該功能的函數(shù)。
函數(shù)的調(diào)用
函數(shù)名(參數(shù)列表)
函數(shù)的調(diào)用,可以在函數(shù)的聲明之前
函數(shù)名:具有某種功能的函數(shù)的名字
參數(shù)列表:是調(diào)用者給函數(shù)的數(shù)據(jù)
小例子
編寫一個(gè)簡(jiǎn)單的函數(shù)
簡(jiǎn)單的函數(shù):沒有參數(shù),沒有返回值

        introduce();
        function introduce() {
            console.log("good");
        }

函數(shù)的調(diào)用可以在函數(shù)的聲明之前

函數(shù)的參數(shù)

參數(shù)可以有多個(gè),多個(gè)參數(shù)之間用逗號(hào)分隔
函數(shù)調(diào)用的本質(zhì)就是實(shí)參給形參賦值的過(guò)程(對(duì)應(yīng)賦值)
小例子

        //此時(shí)str和age稱為形式參數(shù)(形參),本質(zhì)是變量
        function myConsole(str, age) {
            console.log(str+"he is "+age);
        }

        //調(diào)用函數(shù)傳的參數(shù)稱為實(shí)際參數(shù)(實(shí)參),本質(zhì)是值
        //函數(shù)調(diào)用的本質(zhì)就是實(shí)參給形參賦值的過(guò)程(對(duì)應(yīng)賦值)
        myConsole("fanfan is a good girl!", 18, "nice", "beautiful");

注意
函數(shù)接收參數(shù)沒有任何顧慮,可以接收任意多個(gè)

函數(shù)的返回值

return

        function mySum(num1, num2) {
            var sum = num1 + num2;
            // console.log(sum);//在功能函數(shù)中盡量避免打印
            return sum;//結(jié)束函數(shù)的
        }

        //接收了函數(shù)的返回值的值
        var ret = mySum(5, 6);

函數(shù)的作用域

注意:JS中變量的作用域不是以代碼塊來(lái)區(qū)分,而是以函數(shù)來(lái)區(qū)分
變量的作用域:變量能使用的范圍
全局變量
定義位置:所有函數(shù)以外定義的變量
作用域:那里都能用(這句話不嚴(yán)謹(jǐn),有瑕疵)
局部變量
定義位置:函數(shù)內(nèi)用var定義的變量
作用域:在定義的當(dāng)前函數(shù)內(nèi)可以使用

        var num = 10;
        function f(){
            num2 = 30;//定義變量,不用var定義的變量默認(rèn)為全局變量
            //函數(shù)內(nèi)部可以訪問全局變量
            console.log(num);
            num++;
            var num1 = 20;
            console.log(num1);
        }
        //調(diào)用
        f();
        console.log(num);
        //找不到名為num1的變量,此時(shí)這個(gè)num1是函數(shù)f中的局部變量
        //console.log(num1);
        //
        console.log(num2);

變量的提升

當(dāng)程序進(jìn)入一個(gè)新的函數(shù)時(shí),會(huì)將該函數(shù)中所有的變量的聲明放在函數(shù)開始的位置。僅僅會(huì)提升變量的聲明,不會(huì)提升變量的賦值。

    var num = 10;
    function f(){
        console.log(num);//undefined// 聲明了變量,但是變量沒有被賦值,所以結(jié)果是undefined;
        //var num;
        //當(dāng)局部變量與全局變量同名時(shí),優(yōu)先使用局部變量。
        var num = 20;//num=20
        console.log(num);//20
    }
    f();
    //函數(shù)外面使用的是全局變量的num;
    console.log(num);//10

函數(shù)也是一種數(shù)據(jù)

用變量保存函數(shù),可以通過(guò)變量訪問函數(shù)(調(diào)用函數(shù))

    function fun(){
        console.log("good");
    }
    //用變量保存函數(shù),可以通過(guò)變量訪問函數(shù)(調(diào)用函數(shù))
    var f = fun;
    //通過(guò)變量執(zhí)行函數(shù)(訪問函數(shù),調(diào)用函數(shù))
    //變量名(參數(shù)列表);

    f();//此時(shí)f()與fun()相同
    fun();//

    //函數(shù)可以作為參數(shù)傳遞

匿名函數(shù)

匿名函數(shù):沒有名字的函數(shù)
當(dāng)匿名函數(shù)沒有賦值給另一個(gè)變量時(shí)有兩種優(yōu)雅的用法

1、直接傳遞給函數(shù)
        var a = function (){
            console.log("sunck is a good man");
        };
        a();
2、執(zhí)行某些一次性的代碼
       function m(mySum, q, w) {
            return mySum(q, w);
        }

        var ret = m(function(a, b){
            return a + b;
        }, 1, 2);
        console.log(ret);

即時(shí)函數(shù)

即時(shí)函數(shù):當(dāng)函數(shù)聲明之后立即執(zhí)行
組成:()()
結(jié)構(gòu):(匿名函數(shù))(給第一個(gè)小括號(hào)中的匿名函數(shù)傳遞的參數(shù))
第二個(gè)小括號(hào)表明函數(shù)立即執(zhí)行,并且給函數(shù)傳參

        (function(str){
            console.log(str);
        })("good girl");

函數(shù)有固有格式,一定要對(duì)應(yīng),基本的概念就是這樣了,網(wǎng)上有很多練習(xí)的習(xí)題??梢宰约赫艺揖毩?xí)練習(xí)。我也給大家找一個(gè)典型的,用函數(shù)的思想好好練習(xí)一樣。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,619評(píng)論 0 13
  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語(yǔ)言來(lái)說(shuō)都是核心的概念。通過(guò)函數(shù)可以封裝任意多條語(yǔ)句,而且...
    道無(wú)虛閱讀 4,968評(píng)論 0 5
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,264評(píng)論 0 38
  • 寫了為什么不見了?
    光能量閱讀 143評(píng)論 0 1
  • 1. 悠悠每天大呼小叫的說(shuō)自己失戀了,其實(shí)悠悠根本沒有男朋友。 悠悠前些天在朋友的微信群里認(rèn)識(shí)了一個(gè)男生,兩個(gè)人很...
    養(yǎng)生棠舍閱讀 434評(píng)論 0 0

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