1. 程式人生 > 其它 >javascript 函式:中函式宣告與函式表示式的區別

javascript 函式:中函式宣告與函式表示式的區別

// 這裡闡述的比較直接,是為了方便自己回顧複習的

參考:https://www.cnblogs.com/isaboy/p/javascript_function.html

函式表示式沒有函式宣告頭的提升

fn1() // fn1
function fn1() {
    console.log("fn1")
}

fn2() // 報錯
let fn2 =  function(){
  console.log("fn2")  
}

函式宣告頭提升後者會覆蓋前者

fn() // b2
function fn() {
  console.log("a1")  
}
fn() // b2
function fn() {
  console.log("b2")  
}
fn() // b2

  相似題

function foo(){
 function bar() {
   return 3;
 }
 return bar();
 function bar() {
   return 8;
 }
}
alert(foo());

在使用 var 關鍵字時函式與變數同名之間的優先順序變數優先。如果使用的是 es6 宣告變數關鍵字 如果出現變數與函式同名會報錯

function foo() {
  function fn() {
    console.log("普通函式")
  }
  var fn = function(){
    console.log("函式表示式")    
  }    
  return fn()
}

foo() // 輸出 "函式表示式"

  

函式宣告通過條件語句控制函式宣告的行為並未標準化,因此不同環境下可能會得到不同的結果

// 以下擷取:https://www.cnblogs.com/coco1s/p/3959927.html

// 千萬不要這樣做!
// 不同瀏覽器會有不同返回結果,
if (true) {
    function foo() {
        return 'first';
    }
} else {
    function foo() {
        return 'second';
    }
}
foo();
 
 
// 記住,這種情況下要使用函式表示式:
var foo;
if (true) {
    foo = function() {
        return 'first';
    };
} else {
    foo = function() {
        return 'second';
    };
}
foo();