美文网首页
变量提升和函数提升

变量提升和函数提升

作者: 阿拉斯加南海岸线 | 来源:发表于2019-04-10 11:04 被阅读0次

我们习惯将 var a = 2; 看作一个声明,实际上javascript引擎并不这么认为。它将 var a; 和 a = 2; 看作两个单独的声明。第一个是编译阶段的任务,第二个是执行阶段的任务。
这意味着无论作用域中的声明出现在什么位置,都将在代码被执行前首先进行处理。可以将这个过程形象的想象成所有的声明(变量和函数)都会被移动到各自作用域的最顶端,这个过程被称为提升
函数声明和变量声明都会提升,但函数优先提升。注意的是,函数声明会提升,函数表达式却不会。
声明本身会被提升,而包括函数表达式的赋值在内的赋值操作并不会提升。
要避免重复声明。

看看以下两段代码,结果是多少?
第一段:

a = 2;
var a;
console.log( a );

第二段:

console.log( a );
var a = 2;

第一段很多开发者会认为是 undefined, 因为 var a 声明在 a = 2 之后, 他们自然而然地认为变量
被重新赋值了, 因此会被赋予默认值 undefined。 但是, 真正的输出结果是 2。
第二段中,鉴于上一个代码片段所表现出来的某种非自上而下的行为特点, 你可能会认为这个代码片
段也会有同样的行为而输出 2。 还有人可能会认为, 由于变量 a 在使用前没有先进行声明,
因此会抛出 ReferenceError 异常。
不幸的是两种猜测都是不对的。 输出来的会是 undefined。

结合前面提到的理论知识,可以将这两段代码看成如下:
第一段:

var a;
a = 2;
console.log( a );

第二段:

var a;
console.log( a );
a = 2;

这样就容易理解了。

相关文章

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • 引用类型

    变量提升和函数声明提升   函数声明提升就是把函数声明提升到函数声明所在作用域中(或者说一个函数体内)的顶端,变量...

  • 2021-04-02

    变量提升和函数提升以及他们的优先级 1,变量提升:变量提升是指将变量声明提升到它所在的作用域的最开始部分 2,函数...

  • 关于变量提升

    函数提升的优先级要高于变量提升,变量提升到函数声明的后面; 变量提升,但是赋值不提升,函数表达式不提升;

  • let const var

    变量提升 函数会优先于变量提升; 函数提升会把整个函数移到作用域顶部 变量提升智慧把变量的定义移到作用域顶部 wi...

  • 变量提升

    变量提升 Hoisting 变量和函数的声明会在编译时被提升到作用域的顶部 提升的是声明,函数会连带函数体提升 i...

  • 变量提升和函数提升

    摘自《你不知道的JavaScript上卷》KYLE SIMPSON著 变量提升 引擎会在解释 JavaScript...

  • 变量提升和函数提升

    1.变量提升 console.log(a);//undefined var a=123; 因为变量a的声明被提到了...

  • 变量提升和函数提升

    在javascript里存在一种叫变量声明提升的东西。这里来详细的说一说,到底什么样的声明会提升,提升了什么东西。...

  • 变量提升和函数提升

    JS不像C语言,C语言是先声明后使用,否则会报错。但JS中,有变量提升现象,可以先使用后声明。 JS存在变量提升,...

网友评论

      本文标题:变量提升和函数提升

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