范仁义js课程---48、变量和函数的声明提前

范仁义js课程---48、变量和函数的声明提前

一、总结

一句话总结:

变量的声明提前:使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值),但是如果声明变量时不使用var关键字,则变量不会被声明提前
函数的声明提前:使用函数声明形式创建的函数 function 函数(){},它会在所有的代码执行之前就被创建,使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

1、变量的声明提前 是怎么回事?

变量的声明提前:使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值),但是如果声明变量时不使用var关键字,则变量不会被声明提前

2、函数的声明提前 是怎么回事?

函数的声明提前:使用函数声明形式创建的函数 function 函数(){},它会在所有的代码执行之前就被创建,使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

3、为什么 使用函数表达式创建的函数,不会被声明提前?

因为使用var声明的变量会先声明,但是不会被先赋值,执行到赋值代码的时候才会赋值,所以使用函数表达式创建的函数不会被提升声明

4、为什么使用var关键字定义的变量会声明提前,而没有使用var关键字定义的变量不会被声明提前?

使用var关键字声明的变量,解析器知道这是一个新变量,所以会给你声明提前,防止你在变量声明前使用变量报错。而没有使用var关键字定义的变量,解析器不知道这是一个新变量,所以没办法帮你声明提前。

5、为什么使用 函数声明形式创建的函数 会被声明提前,而使用 函数表达式创建的函数,不会被声明提前?

因为使用 函数声明形式创建的函数,解析器一眼就知道这是一个函数,为了方便你在函数声明前使用函数,所以帮你函数提前声明了,而使用 函数表达式创建的函数,本质上是一个赋值表达式,解析器一开始并不知道这是一个函数,所以没办法帮你 声明提前。

二、变量和函数的声明提前

博客对应课程的视频位置:48、变量和函数的声明提前
https://www.fanrenyi.com/video/19/148

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>变量和函数的声明提前</title>
 6 </head>
 7 <body>
 8 <!--
 9 1、
10 变量的声明提前
11 在js中,使用var关键字定义的变量声明会提前(但是不会提前赋值)
12 如果变量没有使用var关键字,那么变量不会被声明提前
13 
14 实质:
15 使用var关键字声明的变量,解析器就知道这是一个新声明的变量,
16 所以会给它加到window对象的属性里面
17 没有使用var关键字声明的变量,解析器不知道这是一个新变量,
18 
19 2、
20 函数也有声明提前
21 在js中,使用 函数声明定义的函数 是声明提前的,也就是可以在定义函数之前使用。
22 但是使用赋值表达式创建的函数 是没有 声明提前的
23 
24 
25 为什么使用 赋值表达式创建的函数 是没有 声明提前的
26 这是因为赋值表达式创建的函数本质是 将函数对象赋值给一个变量,而在变量的提前声明中,
27 变量会被提前声明,但是不会会提前赋值
28 
29 在js里面,所有的全局变量都是js的window对象的属性
30 所有的全局的函数都是js的window对象的方法
31 
32 window对象:js里面给我们创建好了的对象,表示浏览器的一个窗口
33 
34 在js中,作用域分为全局(全局作用域)和局部(函数作用域)
35 
36 全局的变量就表示在script标签里面定义的变量
37 函数作用域 的变量就是在函数里面定义的变量
38 
39 -->
40 <script>
41     /*变量的声明提前*/
42     //var a;
43     //console.log(a);
44     //var a=10;
45     //a=10;
46     //console.log(a);
47 
48     /*函数声明提前*/
49     // hello();
50     // function hello() {
51     //     console.log('函数也有声明提前');
52     // }
53     // hello();
54 
55 
56     console.log(fun1);
57     //fun1();
58     var fun1=function () {
59         console.log('这是赋值表达式创建的函数,');
60     };
61 
62     fun1();
63 </script>
64 </body>
65 </html>
 
原文地址:https://www.cnblogs.com/Renyi-Fan/p/12425895.html