JavaScript的变量声明和变量提高

最近在巩固前端基础,看到预解析和代码执行部分,里面讲到提到了声明提高,由于与咱们的平常很密切,根据我的所得,写一篇文章。前端

1. 先解释一下什么叫预解析?浏览器

  • 顾名思义,提早解析。浏览器在执行代码时,会在js运行前对带有var和function关键字的代码进行提早,这一过程被称为变量提高。预解析值会发生在经过var定义的变量和function上。

2. var关键字 函数

  • 经过var关键字定义的变量在进行预解析过程的时候,都是先声明,而后赋值undefined。无论是否已经赋值,
// 1.
    alert(a);   // undefined
    var a = 1;
    
    // 2.
    alert(b);   //
    var b = function(){}
    
    // 3.
    alert(c);
    var c;

只要是var定义的,无论是变量仍是函数,都是先赋值undefined。若是是变量,也无论是否赋值,在预解析阶段都会被赋值为undefined。code

3. 关键字function字符串

  • 在进行预解析的时候,function此时已经被声明而且被定义了,可是他存储数据的那个空间里面存储的是代码字符串,没有任何意义。
alert(a);  // 弹出的是下面的function
    function a(){}
    
    // 注意:函数在预解析的时候会将代码分红两部分来执行,第一部分是fn函数;第二部分是(),一个匿名函数,这时在执行过程当中会报错。若是小括号带参数,如(2),虽然不会报错,也打印出2,可是并不能把fn执行,不能当作参数传递给fn函数。
相关文章
相关标签/搜索