函數

javascript中的函數指的是一個特定代碼塊,可能包含多條語句,以通過名字來供其它語句調用以執行函數包含的代碼語句。
1.聲明函數
(1)構造函數(通過new創建一個函數對象)

   var Person=new Function(console.log("jam"));
   Person();//jam;

注:此方法不推薦使用。
(2)聲明函數(通過function關鍵字聲明函數)

  function Person(name) {
   console.log(name);
  }
  Person('jam');//jam

(3)函數表達式:

  var Person=function() {
    console.log('jam')
  };
 Person();//jam

無論通過何種方式創建函數,js中的每個函數都是一個名為Function的全局對象的實例,因此js中的每個函數都可以被視為對象。
2.函數中的arguments.
arguments是一個對象。arguments對象是所有函數的一個局部屬性,本質上是一個類似于數組的對象,里面包含了所有傳遞給函數的參數。

 function Person() {
  for(var i=0;i<arguments.length,i++) {
    console.log(argument[i])//jam,jirengu,hunger
     }
  }
Person('jam','jirengu','hunger')
//函數中傳入進來的參數講按照順序保存在arguments中,使用argumetns[0],即可訪問arguments對象中的第一個參數,依次類推。
 使用arguments.length即可獲得對象中的參數的數量

function getInfo(name,age,sex) {
console.log('name:',name);
console.log('age:',age);
console.log('sex:',sex);
console.log('agruments:'argumetns);
arguments[0]='valley';
console.log('name',name)
}
 getInfo('hunger',28,'男') //執行結果如下:
 //  name:hunger
 age:28
 sex:男
 arguments:['hunger','28','男'];//按順序保存著函數傳入進來的參數。
 name:valley//arguments[0]=valley,使第一個參數的值變為了arguments。
getInfo('男')  //執行結果如下:
// name:男
age:undefined;
sex:undefined;
arguments:['男'];
name:valley;
//所有的參數都是按順序傳入進來,沒有傳值得就是undefined;

3.函數的重載

  • 簡單的說函數重載就是,當兩個函數名相同時,后一個函數聲明會把前一個函數聲明給覆蓋。
    function add() {
    console.log("被后面的函數覆蓋")
    }
    function add() {
    console.log("覆蓋前面的函數")
    }
    add()// 覆蓋前面的函數。(執行第二個函數)
    4.聲明提升
    和變量的聲明前置一樣,函數聲明也會前置。即使函數執行寫在前面也可以執行,因為函數聲明即使在后面,也會前置。

    fn(); // "1"
    
     function fn(){
      console.log('1');
     }
      //這是一個簡單的例子。次代碼函數聲明前置后為
    
     function fn() {
        console.log('1')
        }
      fn();//1
    

下面看一個復雜一點的例子:
sayName('world');
sayAge(10);
function sayName(name) {
console.log('hello',name);
}
var sayAge=function(age) {
console.log(age;)
};
根據函數聲明前置,此代碼等價于以下代碼:
function sayName(name) {
console.log('hello',name);
}
var sayAge;
sayName('world');//hello world
sayAge(10);//報錯,sayAge is not a function
sayAge=function(age){
console.log(age)
}
當使用函數表達式的方法聲明函數時,函數前置的規則和變量前置的規則一樣

下面看一個函數聲明前置和變量聲明前置混在一起的例子
   function fn(fn2) {
    console.log(fn2);
    var fn2=3;
    console.log(fn2)
    console.log(fn);
    function fn2() {
      console.log('fnnn2')
    }
  }
  fn(10);
根據函數聲明前置和變量聲明前置,上面的代碼下面的代碼等價
        function fn(fn2) {
            var fn2;
            function fn2() {
              console.log('fnnn2');
      }
          console.log(fn2);//function fn2() {console.log('fnnn2')},因為此時fn2是一個函數。
          fn2=3;
          console.log(fn2);//3,此時fn2=3,
          console.log(fn)//輸出fn這個函數
    }
    fn(10);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 函數聲明和函數表達式有什么區別 (*)解析器會率先讀取函數聲明,并使其在執行任何代碼之前可以訪問;函數表達式則必須...
    coolheadedY閱讀 402評論 0 1
  • 1.函數聲明和函數表達式有什么區別 (*) 區別: 函數聲明后面的分號可加可不加,不加也不影響接下來語句的執行,但...
    Sheldon_Yee閱讀 418評論 0 1
  • 問答題 函數聲明和函數表達式有什么區別 (*)答://函數聲明function hello(){ conso...
    饑人谷_桶飯閱讀 256評論 0 0
  • 1. 函數聲明和函數表達式有什么區別? 在變量提升或聲明提前過程中,函數聲明是將整個被定義的函數提前,即該函數可以...
    王康_Wang閱讀 392評論 0 0
  • 有的人撩妹兒手段之高明。。。 最近一段時間特別多的陌生人請求添加好友,有的條件查找,有的來源于空間好友,當然一般極...
    夜空星星淚閱讀 784評論 11 2