码迷,mamicode.com
首页 > Web开发 > 详细

【《你不知道的JS》】四、提升

时间:2020-06-09 23:21:51      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:erro   why   asc   UNC   func   小结   声明   ons   err   

四、提升:

一)、声明与赋值:

? 在JS引擎中,我们一般认为的变量或函数声明,实际上分为两个部分。

声明 赋值

// 变量提升
a = 2;
var a;
console.log(a);

// 函数提升
foo();
function foo() {
	console.log(1);
}

? var a = 2;

? 这句声明实际上会被看为 var a; a = 2; 两个部分。第一个部分就是真正的函数声明,会在 编译阶段进行。而第二部分被称作赋值,在 执行阶段进行。在每个作用域中(包括全局作用域以及局部作用域)都会先寻找声明并首先处理。这样好像就把声明都放在每个作用域的开头几行中,因此这种行为被称作 提升

二)、注意事项:

  • 每个作用域都会在其作用域范围内进行提升。

  • 函数声明优先于变量声明。

  • 多个同名函数声明,后面的函数声明会覆盖之前的声明。

  • 函数声明会被提升,而函数表达式不会被提升。

    foo();
    var foo = function() {
    	console.log(2);  //Uncaught TypeError: foo is not a function
    }
    
    • WHY?

      1. var foo; $\to$ 在编译阶段被提升。

      2. foo(); $\to$ 试图调用foo,但是此时函数表达式并没有赋值给foo!

三)、小结:

? 无论作用域中的声明出现在什么地方,都将在代码本身被执行前首先进行处理。

【《你不知道的JS》】四、提升

标签:erro   why   asc   UNC   func   小结   声明   ons   err   

原文地址:https://www.cnblogs.com/enmac/p/13081676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!