函數的基本知識,解析順序,效率,作用域

三種定義函數的方式:
function語句形式
函數直接量形式
通過Function構造函數形式定義函數

比較三種方式定義的區別:

function語句

Function構造函數

函數直接量

兼容

完全

js1.1以上

js1.2以上版本

形式

句子

表達式

表達式

名稱

有名

匿名

匿名

性質

靜態

動態

靜態

解析時機

優先解析

順序解析

順序解析

作用域

具有函數的作用域

頂級函數(頂級作用域)

具有函數作用域


/*----------------------函數效率對比--------------------*/
      var date = new Date();
      var d1 = date.getTime();
        for(var i=0; i<100000; i++){
          function test(){;};     //function語句形式效率更高
          //var test2 = new Function();
        }
      var date2 = new Date();
      var d2 = date2.getTime();
      alert(date2 - date);

      /*--------------------函數解析順序----------------------*/
      //function語句形式:優先解析,先解析function函數
      test();
      function test(){
        console.log('語句形式,優先解析');
      }

      //函數直接量形式:順序解析,先解析test2方法在解析函數
      test2();
      var test2 = function(){
        console.log('直接量形式,順序解析');
      }

      /*----------------------函數解析順序--------------------*/
      //第一個函數,返回4,說明第一個函數被第四個函數覆蓋
      function f(){
        return 1;
      }
      console.log(f());

      //第二個函數,返回2,說明第四個函數被第二個函數覆蓋
      var f = new Function("return 2")
      console.log(f());

      //第三個函數,返回3,說明第二個函數被第三個函數覆蓋
      var f = function(){
        return 3;
      }
      console.log(f());

      //第四個函數,返回3,說明第四個函數被第三個函數覆蓋
      function f(){
        return 4;
      }
      console.log(f());

      //第五個函數,返回5,說明第三個函數被第五個函數覆蓋
      var f = new Function("return 5")
      console.log(f());

      //第六個函數,返回6,說明第五個函數被第六個覆蓋
      var f = function(){
        return 6;
      }
      console.log(f());

      /*---------------------函數作用域的概念---------------------*/
      var k = 1;
      function t1(){
        var k = 2;
        //返回2
        function test(){
          return k;
        }

        //返回2
        var test = function(){
          return k;
        }

        //返回1
        var test = new Function('return k');

        console.log(test());
      }
      console.log(t1());


發佈了151 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章