踩坑日记:js变量、函数提升。

110 阅读1分钟

js函数、变量提升。

相关概念:函数提升,函数声明,函数表达式;

  • 函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符;
  • 如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。

函数声明: function 函数名称 (参数:可选){ 函数体 } 函数表达式: function 函数名称(可选)(参数:可选){ 函数体 }

举个例子:

  function foo(){} // 声明,因为它是程序的一部分
  
  var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分

  new function bar(){}; // 表达式,因为它是new表达式

  (function(){
    function bar(){} // 声明,因为它是函数体的一部分
  })();

总结

  1. 函数及变量的声明都将被提升到函数的最顶部。
  2. 函数声明,函数的声明以及定义都提升,函数表达式和变量表达式只是将函数或者变量的声明提升到函数顶部,而函数表达式和变量的初始化将不被提升.