美文网首页
JavaScript 声明提前机制

JavaScript 声明提前机制

作者: 林_三月 | 来源:发表于2018-08-12 21:56 被阅读0次

声明提前机制

在JavaScript存在着这样一种预处理机制,即浏览器在解析JS代码时会将var声明的变量和function声明的函数提升到当前作用域的顶部。但是解析JS代码时对var和function关键字声明的对象的处理是不一样的:前者在解析时只是将声明提前了,但是赋值却依旧在原来的位置。而后者不仅将声明提前了,而且将定义也完成。具体请看下面的例子:

1 console.log(hello);         //undefined
2 sayHi();                    //hi
3
4 var hello = "hello";
5 console.log(hello);         //hello
6
7 function sayHi() {
8      console.log("hi");
9 }

在第一行输出一个在下面用var声明并且赋值的hello变量,没有报错但是输出的是undefined,说明hello变量的声明确实是被提前了但是没有赋值,所以输出的是undefined。正是因为给变量赋值依旧在原来的位置,所以第五行输出hello变量可以正常输出。在处理function定义的sayHi函数时,sayHi的声明被提前了,同时也对它进行了定义,所以在第二行调用sayHi时正常输出hi而不是报 sayHi is not defined 或者sayHi is not a function的错。

函数声明优先于变量声明

需要注意的是:函数声明优先于变量声明,看下面例子:

1 console.log(sayHi);         // ƒ sayHi() { console.log("hi"); }
2
3 var sayHi = "sayHi";
4 function sayHi() {
5     console.log("hi");
6 }
7
8 console.log(sayHi);         // sayHi

先用var声明变量sayHi并赋值为"sayHi",然后用function再将sayHi重新声明为一个函数。在声明的前后输出sayHi,发现前面输出的是一个函数,后面输出的是一个字符串"sayHi"。显然可以看出函数声明是优先于变量声明的。

相关文章

  • JavaScript 声明提前机制

    声明提前机制 在JavaScript存在着这样一种预处理机制,即浏览器在解析JS代码时会将var声明的变量和fun...

  • JavaScript的预解析

    在JavaScript中有一种机制就是:“预解析机制” 简单来说就是在解析过程中会先将函数声明和变量声明提前解析函...

  • Javascript 声明提前

    函数定义语句中函数被显式地"提前"到了脚本或函数地顶部。因此它们在整个脚本和函数内部都是可见的。使用var地话只有...

  • 关于js的变量提升(hoisting)

    javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都...

  • ES5中认知上的一些遗漏点

    1. JavaScript 中对变量和函数声明的“提前(hoist) JavaScript 中对变量和函数声明的“...

  • JavaScript中的声明提前

    js在执行的时候,是从上到下,从左到右,一行一行执行的,但是不知道在这之前还要做一些事情,js程序在正式执行之前,...

  • javascript变量声明提升(hoisting)

    java script的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明...

  • JS 函数声明和函数表达式的区别

    函数声明和函数表达式的区别优先级JavaScript的变量声明提升机制-即可以先使用,后声明函数声明会被提升到作用...

  • 声明提前

    var a=1; function test() { console.log(a)//function a(b...

  • 声明提前

    javascript函数在执行时会将声明提前到函数执行的位置,但不会对变量赋值,直到执行到声明变量并赋值的语句才会...

网友评论

      本文标题:JavaScript 声明提前机制

      本文链接:https://www.haomeiwen.com/subject/bqeebftx.html