资讯专栏INFORMATION COLUMN

函数的提升

Reducto / 2495人阅读

摘要:我们知道,对于所有的变量,无论在函数体的什么地方声明,都会在后台被提升到函数体顶部。唯一需要引起注意的地方在于当适用函数声明时,函数定义也会被提升,而不仅仅是函数声明被提升。

  

我们知道,对于所有的变量,无论在函数体的什么地方声明,都会在后台被提升到函数体顶部。

这个规则对于函数同样适用,其原因在于函数只是分配给变量的对象。唯一需要引起注意的地方在于当适用函数声明时,函数定义也会被提升,而不仅仅是函数声明被提升。看下面的代码:

function test() {
  console.log(typeof foo);   // "function"
  console.log(typeof bar);   // "undefined"

  function foo() {

  }

  var bar = function () {

  };
}

test();

test()函数中的foobar的声明被提升到了顶部;同时,需要注意的是:foobar的区别在于前者的定义得到了提升,而后者的定义没有提升,这也就是console.log(typeof bar)输出undefined的原因。

所以,需要记住的是:函数表达式仅仅是变量被提升,而函数的实现没有被提升。
上面的代码中,后台解析的代码类似于:

function test() {
  var bar;
  function foo() {

  }
  console.log(typeof foo);   // "function"
  console.log(typeof bar);   // "undefined"

  var bar = function () {

  };
}

test();

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

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

相关文章

  • JS中变量提升函数提升

    摘要:什么是函数作用域下的变量提升和函数提升函数作用域中也存在变量提升和函数提升,这个和全局作用域下的情况是一模一样的,就是把作用域想成是全局的就可以了。 在js中有一部分比较难以理解,却也是在笔试过程中很容易考的,那就是变量提升和函数提升的问题,这篇文章我会就变量提升和函数提升的问题拓展一下有关js函数的知识点,包括作用域的问题,后面还会有一些小练习来判断自己是否真的搞懂了。 作用域 在j...

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

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

    wuaiqiu 评论0 收藏0
  • 变量和函数声明提升

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

    FleyX 评论0 收藏0
  • js变量提升函数提升机制

    摘要:所谓变量提升,提升就是为了事先声明变量。变量提升之后,但其赋值还是留在原本的位置等运行到了之后动态赋值,而函数提升之后直接相当于在代码里抽空了。搞明白这个例子也就搞懂了作用域中变量和函数是怎么提升的。 问题 showImg(https://segmentfault.com/img/bVJ614?w=222&h=165); 在这个例子中它应该输出什么?输出的结果是6。 showImg(h...

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

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

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

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

    curlyCheng 评论0 收藏0

发表评论

0条评论

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