函数声明&函数表达式

函数声明:一种独立的结构。

eg:function fn(){   /*do something*/  }

函数表达式:函数定义为表达式语句(通常是变量赋值)的一部分。

eg:var a = function fn(){   /*do something*/  }
  • 区别
    • 对于函数声明,js解析器会优先读取,确保在所有代码执行之前已经被解析
    • 对于函数表达式,只在执行到某一句时也会对其进行解析
实例
  • 下面一段代码返回2
function foo(){
   function bar() {
   return 1;
 }
   return bar();
   function bar() {
   return 2;
 }
}
alert(foo());
  • 吃惊脸!!!return 语句后面的代码是运行不到的啊……
  • 解析:
    执行 JavaScript 过程中,有 Context(ECMA 5 将之分解为 LexicalEnvironment、VariableEnvironment 和 ThisBinding)和 Process(一系列按序调用的语句)两个概念。当程序进入执行域时,Declaration 会造成 VariableEnvironment。它们不同于 Statement(比如 return),也不遵循 Statement 的运行规则。
  • 下面一段代码返回1
function foo(){
   var bar = function() {
   return 1;
 };
 return bar();
   var bar = function() {
   return 2;
 };
}
alert(foo());
  • 解析:
    执行到return返回了,没后面什么事了

关于自执行
  • 函数 声明的自执行
    (function fn(){
        alert(1);
    })();
  • 函数表达式的自执行
var a = function aaa(){alert(2)}();

    ~function aaa(){
        alert(3);
    }();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容