函数声明和函数表达式的另一种区别

前段时间去面试,面试官问我函数声明和函数表达式的区别,当时果断的就说出了变量提升,然后又问我在使用上还有什么区别,想了很久也没想到其他的用法,昨天在写闭包的时候突然发现了闭包中对函数表达式的使用,如下

function f1(){
  var n=1;
  nAdd=function(){n+=1}
  function f2(){
    alert(n);
  }
    return f2;
}
  var result=f1();
  result(); // 1
  nAdd();
  result(); // 2

在函数f1中使用函数表达式定义了nAdd,函数表达式本质是把一个匿名函数赋值给一个变量,而这个变量是全局的,所以我们在函数外也可以使用这个函数。如何我们把这里换成函数声明,这段代码就无法正常运行了,不能在函数外调用函数内的函数,如果我们把这个函数声明在f1函数外,又会导致无法访问到变量n,所以函数表达式比函数声明多一个功能,就是在一个函数中可以定义一个全局函数,可以在函数外直接调用它。

猜你喜欢

转载自blog.csdn.net/qq_41635167/article/details/84189495