JS函數(shù)

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

  • 聲明函數(shù)
    使用function可以聲明一個函數(shù)
Paste_Image.png
  • 函數(shù)表達(dá)式
Paste_Image.png
  • 區(qū)別
    聲明函數(shù)聲明不用放在調(diào)用前面,函數(shù)表達(dá)式聲明必須放在調(diào)用前面,函數(shù)表達(dá)式是一個賦值的過程

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

  • 在一個作用域下VAR聲明的變量和Function聲明的函數(shù)會前置。
  • 在函數(shù)內(nèi)部VAR聲明的變量同樣前置。
  • 當(dāng)命名沖突時先前置后覆蓋。

3. arguments 是什么

Paste_Image.png
  • 在函數(shù)內(nèi)部可以使用arguments對象獲取該函數(shù)的所有傳入?yún)?shù)。

4.函數(shù)的"重載"怎樣實現(xiàn)

  • 在JS中沒有重載,同名函數(shù)會被覆蓋,但可以在函數(shù)體針對不同的參數(shù)調(diào)用相應(yīng)的邏輯。
Paste_Image.png

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

          (function(){
          var a = 1;
          })
         ( function fn1() {});
         // 在數(shù)組初始化器內(nèi)只能是表達(dá)式
         [function fn2() {}];
         // 逗號也只能操作表達(dá)式
         , function fn3() {}; 
  • 作用:隔離作用域。

6.求n!,用遞歸來實現(xiàn)

1.自己調(diào)用自己;
2.設(shè)定終止條件;
4.優(yōu)點(diǎn):算法簡單;
5.缺點(diǎn):效率低;

      function factor(n){
          if(n==1||n==0){
          return 1}else if(n<0){
          return false}
          return n * factor(n-1)
      } 

7. 以下代碼輸出什么?

function getInfo(name, age, sex){
    console.log('name:',name);
    console.log('age:', age);
    console.log('sex:', sex);
    console.log(arguments);
    arguments[0] = 'valley';
    console.log('name', name);
} 

getInfo('饑人谷', 2, '男');
getInfo('小谷', 3);
getInfo('男');

輸出
getInfo('饑人谷', 2, '男');
"name" "饑人谷";"age" "2"; "sex" "男";[object Arguments] {0: "饑人谷",1: 2,2: "男"}
getInfo('小谷', 3);
"name:""小谷";"age:"3";sex:"undefined;[object Arguments] { 0: "小谷",1: 3}"name""valley"
getInfo('男');
"name:""男""age:"undefined"sex:"undefined[object Arguments]{0: "男"}"name""valley"

8. 寫一個函數(shù),返回參數(shù)的平方和?

function sumOfSquares(){
 var sum=0;
 for(var i=0;i<arguments.length;i++){
     sum += arguments[i] * arguments[i]
   }
   return sum}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result)  //29
console.log(result2)  //10

9. 如下代碼的輸出?為什么

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

輸出:
var a;
console.log(a); //undefined
a=1;
console.log(b);//ReferenceError: b is not defined

10. 如下代碼的輸出?為什么

sayName('world');
sayAge(10);
function sayName(name){
    console.log('hello ', name);
}
var sayAge = function(age){
    console.log(age);
};

輸出
hello world Uncaught TypeError: sayAge is not a function//函數(shù)表達(dá)式不會像函數(shù)聲明一樣 被前置,所以執(zhí)行到sayAge(10);這一句時函數(shù)sayAge未被聲明,此時它還不是一個函數(shù)

11. 如下代碼輸出什么? 寫出作用域鏈查找過程偽代碼

Paste_Image.png

12. 如下代碼輸出什么? 寫出作用域鏈查找過程偽代碼

Paste_Image.png

13. 以下代碼輸出什么? 寫出作用域鏈的查找過程偽代碼

Paste_Image.png

14. 以下代碼輸出什么? 寫出作用域鏈查找過程偽代碼

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

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

  • 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 (*)解析器會率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可以訪問;函數(shù)表達(dá)式則必須...
    coolheadedY閱讀 459評論 0 1
  • 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別? 函數(shù)聲明和函數(shù)表達(dá)式是EMACScript規(guī)定的兩種不同的聲明函數(shù)的方法。1.函...
    LeeoZz閱讀 454評論 0 1
  • 1、函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 函數(shù)聲明可以看作是函數(shù)的初始化,我們將給函數(shù)傳參并建立函數(shù)體的表達(dá)式,當(dāng)我門建...
    zh_yang閱讀 429評論 0 1
  • 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 函數(shù)聲明: 函數(shù)表達(dá)式: JavaScript 解釋器中存在一種變量聲明被提升的機(jī)...
    肥魚666閱讀 171評論 0 0
  • 1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 函數(shù)聲明 代碼執(zhí)行時函數(shù)聲明會被提升到最前執(zhí)行,所以函數(shù)的調(diào)用與函數(shù)聲明的順序...
    Feiyu_有貓病閱讀 482評論 0 0

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