资讯专栏INFORMATION COLUMN

函数声明和提升

cppprimer / 2186人阅读

摘要:但实际上会将其看成两个声明和。第二个赋值声明会被留在原地等待执行阶段。所以,就输出外面的了函数声明和变量声明都会被提升。局部变量变量声明提升局部变量由于函数体内存在变量声明提升,所以上面代码实际运行如下

在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分

引擎会在解释 JavaScript 代码之前首先对其进行编译(没错,JavaScript
也是要进行编译的!),而编译阶段中的一部分工作就是找到所有声明,并用合适的作用域将他们关联起来,即
包括变量和函数在内的所有声明都会在任何代码被执行前首先被处理。

1.引擎在解析 JavaScript 代码之前首先对其进行编译。编译阶段中的一部分工作就是找到所有的声明,并用合适的作用域将它们关联起来;
2.变量和函数在内的所有声明都会在任何代码被执行前首先被处理;
3.当定义一个 var a = 1; 时,可能会认为这是一个声明。但 JavaScript 实际上会将其看成两个声明: var a; 和 a = 1; 。第一个定义声明是在编译阶段进行。第二个赋值声明会被留在原地等待执行阶段。
**

函数提升

**
解析器在解析时对函数声明与函数表达式有着不同的优先级,实际上编译阶段函数声明会先于变量被提升,并使其在执行任何代码之前可访问,函数表达式实际上是变量声明的一种,因此函数声明提升优于函数表达式

函数声明才存在函数提升

var num = 20;
function test(){  
    console.log(num);    // 20
    num = 10;  //去掉了var 就变成定义了全局变量了
    console.log(num);    // 10
}
test();
console.log(num);    // 10

外面的是全局的。里面的可以访问它,里面定义的在输出后面,且不能变量提升。所以,就输出外面的20了

函数声明和变量声明都会被提升。但是函数会首先被提升,然后才是变量。
局部变量 变量声明提升

var a= 20;
function numa(){
    console.log(a);    // undefined
    var a= 10;  //局部变量
    console.log(a);    // 10
}
numa();
 

由于函数体内存在变量声明提升,所以上面代码实际运行如下:

var a = 20;
function numa(){
    var a;
    console.log(a);    // undefined
    a = 10; 
    console.log(a);    // 10
}
numa();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102421.html

相关文章

  • 变量函数声明提升

    摘要:声明提升变量和函数声明提升发生在预编译阶段。上面代码,函数内相当于对全局变量进行赋值函数声明提升创建函数有两种方式,函数声明和函数表达式,只有函数声明存在提升。同时声明变量和函数显示的是,初步证明的优先级高于。 声明提升 变量和函数声明提升发生在JavaScript预编译阶段。 所谓的声明提升,就是说变量或者函数在声明的时候会被提前到当前作用域的顶部,已经处于可访问状态。 变量声明提升...

    FleyX 评论0 收藏0
  • javascript声明提升

    摘要:但是碰到声明提升,这种想法就会被打破。声明一个函数进行相应的操作,会得到函数声明提升的结果。由此可以发现变量和函数的声明都会被提升在其他代码的前面执行。一个普通块内部的函数声明通常会被提升到所在的作用域的顶部。的创建初始化和赋值均会被提升。 Javascript声明提升 在分析声明提升之前,我认为有必要知道的两点: 一、引擎查询变量的两种方式 引擎查询变量的方式可以分为LHS和RHS两...

    evin2016 评论0 收藏0
  • 浅析JavaScript中的提升

    摘要:代码在执行时并不完全是由上到下一行一行执行的,由此产生了一个提升的问题。第二个赋值声明会被留在原地等待执行阶段。可以得知函数声明提升的优先权大于普通变量声明。 JavaScript代码在执行时并不完全是由上到下一行一行执行的,由此产生了一个提升的问题。 什么是提升 可以简单理解为:声明(变量和函数)都会被移动到各自作用域的最顶端,这个过程被称为提升。 具体例子看提升 下面两个例子a会l...

    everfly 评论0 收藏0
  • 译: 函数提升提升面试的相关问题

    摘要:函数提升在里有两种方式创建函数,通过函数声明和函数表达式。函数声明用指定的参数来定义函数。提示不要在中进行函数声明。问题输出两个都是用函数声明的函数,将被提升到的局部作用域顶端。函数本身将作为函数声明在全局范围内提升。 作者关于提升的话题,总共有两篇。(后来又有一个讨论篇),再次搬过来。水平有限,如果翻译的不准确请包涵,并去看原文。下面开始: 这是我之前的关于提升的文章,标题为《用le...

    wuaiqiu 评论0 收藏0
  • 【6】JavaScript 函数高级——执行上下文与执行上下文栈、变量提升(图解+典型实例分析)

    摘要:函数和变量相比,会被优先提升。这意味着函数会被提升到更靠前的位置。仅提升声明,而不提升初始化。 JavaScript 函数高级——执行上下文与执行上下文栈(图解+典型实例分析) 变量提升与函数提升 变量声明提升 通过 var 定义(声明)的变量,在定义语句之前就可以访问到 值:undefined /* 面试题 : 输出 undefined */ var a = 3 ...

    niuxiaowei111 评论0 收藏0
  • 深入理解 js 声明提升( 尾部有总结 面试题解析 )

    摘要:要理解函数的提升行为,让我们先解析什么是的提升。也就是说声明提升了,赋值还留着原地,等待执行。声明被提升,而包括函数表达式的赋值在内的赋值操作并不会提升,而是留在原地等待执行。 javaScript自上而下执行的顺序受到很多新手和部分老手的共识,但是这其实并不完全正确,这涉及到js的编译过程,这方面我们稍后会聊到,先考虑下面代码: window.onload = function(){...

    curlyCheng 评论0 收藏0

发表评论

0条评论

cppprimer

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<