JavaScript中变量和函数声明的提升

js代码执行前,会有一个预编译过程,该过程主要进行以下操作:语法检查,和声明提升。

声明提升,又分为两部分:变量声明提升和函数声明提升。

声明提升的主要表现:先使用后声明。

变量声明提升:在当前代码块执行前,所有变量声明会在预编译阶段提前完成,所有变量被赋值为undefined,可以理解为变量提前创建。

console.log(num);//undefined

var num = 100;

/*以上代码可以理解为:

var num;

console.log(num);

num = 100;

*/

函数声明提升:函数对象在预编译阶段,已经完全创建完毕,可以随时使用。函数声明提升高于变量声明。

fn();

 function fn(){

     console.log("我被提前创建完成!")//我被提前创建完成!

}

//同时声明变量a和函数a

vara;

functiona() {}

alert(typeofa);//显示的是"function",初步证明function的优先级高于var。

//先声明函数后声明变量,证明上边的例子不是function覆盖了变量

functiona() {}

vara;

alert(typeofa);//显示的仍是"function",而不是"undefined",即function的优先级高于var。

//声明了变量的同时赋值

functiona() {}

vara = 1;

alert(typeofa);//number,此时不是function了。

//说明:"var a=1"相当于"var a;a=1",即先声明,后赋值,"a=1"相当于把a重新赋值了,自然就是number!

注意:if逻辑中声明的函数,不参与函数声明提升,但是参与变量声明提升;

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

推荐阅读更多精彩内容

  • 前端07班 王语句JavaScript程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是...
    ea203453e188阅读 934评论 0 4
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 1,714评论 0 6
  • 来源:仗剑走天涯! 关于javascript的作用域的一些总结,主要参考以上文章,加上自己的整理的理解。 近日对j...
    Michael_林阅读 980评论 0 1
  • ` int a[]={1, 2, 3}; int &index(int i) { return a(i); } ...
    Ak99阅读 366评论 0 0
  • 夜越深,越清醒,是一种怎样的煎熬。
    征鸿_阅读 165评论 0 0