函數(shù)與作用域

一、函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別

函數(shù)聲明:函數(shù)聲明必須有函數(shù)名,函數(shù)可以在任意地方調(diào)用。
函數(shù)表達(dá)式:前后兩個函數(shù)的名字可以相同也可以不相同, function 后面的這個名字是可以省略的 , function 后面的這個名字只能再函數(shù)內(nèi)部使用 ,函數(shù)調(diào)用只有在函數(shù)表達(dá)式聲明后調(diào)用。

二、什么是變量的聲明前置?什么是函數(shù)的聲明前置

當(dāng)執(zhí)行流進(jìn)入一個作用域后,作用域里面的函數(shù)和變量會被提升到作用域頂部預(yù)先解析,此時(shí)變量被賦值為undefined,變量真正的值不會提升,函數(shù)則是整體被提升,確保所有代碼執(zhí)行之前已經(jīng)全部被解析,無論在哪里調(diào)用此函數(shù)都會執(zhí)行。如下所示

            a();    // a
            console.log(b);    // undefined
            function a(){
                console.log("a");
            }
            var b="b";
            console.log(b);    // b

三、arguments 是什么?

arguments 是一個對應(yīng)于傳遞給函數(shù)的參數(shù)的類數(shù)組對象。arguments對象是所有(非箭頭)函數(shù)中都可用的局部變量。你可以使用arguments對象在函數(shù)中引用函數(shù)的參數(shù)。如下代碼:

            function a(){
                console.log("名字:"+arguments[0]);    //名字:小明
                console.log("年齡:"+arguments[1]);    //年齡:22
                console.log("性別:"+arguments[2]);    //性別:男
                console.log("傳進(jìn)的參數(shù)有幾個:"+arguments.length+"個");    //3個
            }
            function b(name,age,sex,achievement){
                console.log("name:"+name);    //name:小紅
                console.log("age:"+age);    //age:21
                console.log("sex:"+sex);      //sex:女
                console.log("achievement"+achievement) //achievement:A+
                console.log("傳進(jìn)的參數(shù)有幾個:"+arguments.length+"個");    //4個
                arguments[0]="小青"
                console.log("名字被改為"+name+"了");    //名字被改為小青   
            }                                                    
            a("小明","22","男");
            b("小紅","21","女","A+")

四、函數(shù)的"重載"怎樣實(shí)現(xiàn)

js中沒有重載! 同名函數(shù)會覆蓋。 但可以在函數(shù)體針對不同的參數(shù)調(diào)用執(zhí)行相應(yīng)的邏輯。

 function printPeopleInfo(name, age, sex){
    if(name){
      console.log(name);
    }

    if(age){
      console.log(age);
    }

    if(sex){
      console.log(sex);
    }
  }

  printPeopleInfo('Byron', 26);
  printPeopleInfo('Byron', 26, 'male');

第一次調(diào)用時(shí),沒有sex參數(shù),函數(shù)內(nèi)的sex參數(shù)被賦值為undefined,if的判斷里面的undefined,被轉(zhuǎn)換為false,里面的代碼不會被執(zhí)行,所以實(shí)現(xiàn)了"重載"。

五、立即執(zhí)行函數(shù)表達(dá)式是什么?有什么作用?

  1. 立即執(zhí)行函數(shù)表達(dá)式是什么
    定義一個函數(shù)后,立即調(diào)用這個匿名函數(shù);它還有多種寫法:
(function(){alert('立即執(zhí)行函數(shù)')} ()) // 用括號把整個表達(dá)式包起來
(function(){alert('立即執(zhí)行函數(shù)')}) () //用括號把函數(shù)包起來
!function(){alert('立即執(zhí)行函數(shù)')}() // 求反
+function(){alert('立即執(zhí)行函數(shù)')}()
。。。等等
  1. 作用:
    ① 是不必為函數(shù)命名,避免了污染全局變量;
    ② IIFE內(nèi)部形成了一個單獨(dú)的作用域,可以封裝一些外部無法讀取的私有變量。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 函數(shù)聲明語法:function functionName(arg0,arg1,ar...
    _Dot912閱讀 659評論 0 3
  • 1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 函數(shù)就是一段可以反復(fù)調(diào)用的代碼塊。函數(shù)還能接受輸入的參數(shù),不同的參數(shù)會返回不同...
    徐國軍_plus閱讀 529評論 0 0
  • 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 JavaScript 中需要創(chuàng)建函數(shù)的話,有兩種方法:函數(shù)聲明、函數(shù)表達(dá)式,各自寫...
    蕭雪圣閱讀 1,030評論 2 2
  • 1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 函數(shù)聲明 代碼執(zhí)行時(shí)函數(shù)聲明會被提升到最前執(zhí)行,所以函數(shù)的調(diào)用與函數(shù)聲明的順序...
    Feiyu_有貓病閱讀 466評論 0 0
  • 1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 function命令聲明的代碼區(qū)塊,就是一個函數(shù)。function命令后面是函...
    饑人谷_Leon閱讀 336評論 0 0

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