问题

首先:普遍认为函数声明提升优于变量提升
但为什么下面的结果是这样的呢(第一个输出我们好理解,因为是先编译后赋值,编译的时候先声明了var 和 function,之后再进行赋值)预编译看这篇

它们都会进行预解析,函数声明提前于变量声明,但是最终会被变量覆盖!

console.log(typeof a); // functionvar a = 1;function a(){}console.log(typeof a); // number

解释:肯定是函数声明优先,但最后的结果要看谁最后赋值

函数声明先赋值,变量声明执行到赋值语句才赋值

因为两种声明方式共同操作一块栈空间,所以,主要看是谁最后赋值的,我们再看一个例子:

console.log(typeof a); // functionvar a = 1;function a(){}console.log(typeof a); // number

这就看的出来了,通过上边的这个demo, 明显可以看出来,应该 函数声明先赋值的,它是在执行上下文的执行阶段一开始的时候就已经进行了赋值操作,所以 最开始 typeof a 可以得到 function;而,变量声明 是要执行到赋值语句的时候才进行的赋值,所以 最后 typeof a 得到是 number;

参考文章:函数声明 和 var声明的优先级

变量提升和函数提升哪个优先相关推荐

  1. JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化

    JS函数简单的底层原理 (个人理解): 1. 已经使用var申明且赋值,若再次申明,则第二次申明(不赋值)无效. 2.在同一个作用域下,只要是发生了同名,且变量完成赋值,后者会覆盖前者.存在两个相同的 ...

  2. js 变量提升与函数提升

    规则: 函数的提升优先于变量提升.同名的函数会覆盖同名的函数与变量.同名的变量不会覆盖同名的函数. 示例代码1: <!DOCTYPE html> <html lang="z ...

  3. 函数的自执行,变量提升和函数提升

    其实之前虽然刚开始学习JavaScript的时候经常看到function  add(){}.var add=function(){}.function(){}之类的这种写法,但是具体是什么叫什么却没有 ...

  4. JavaScript系列文章:变量提升和函数提升

    第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...

  5. 变量提升以及函数提升

    目录 例子 变量提升 函数提升 当函数提升遇到变量提升 例子 function a(){var b = 10function b(){}console.log(b) } a() 结果是10 funct ...

  6. JS变量提升和函数提升的顺序

    1.变量的提升: 变量名会提升到 '当前作用域' 顶部,此时该变量为undefined,未赋值,赋值是在js原位置. console.log(a); // undefined var a = 10 c ...

  7. js中的变量提升和函数提升——精炼版

    javaScript中用var定义变量时存在变量提升(ES6及之后的let/const定义变量时为块级作用域无变量提升,ES6之前js没有块级作用域),比如: console.log(a); // 不 ...

  8. js高级第一章--变量提升,函数提升

    js高级第一章–变量提升,函数提升 文章目录 前言 一.什么是js里的提升? 二.js变量提升 三.js函数提升 四.特殊情况 总结 前言 在js中,最基本的声明方式有三种,即:var,let,con ...

  9. 那些容易忽略的事3-(变量提升和函数提升)

    1.变量提升:只要变量在代码中进行了声明,无论它在哪个位置上进行声明, js引擎都会将它的声明放在范围作用域的顶部: console.log(a); //undefined var a; 2.函数提升 ...

  10. JS中的变量提升和函数提升

    console.log(a); var a = 1 如上面代码中可以看出,由于JS是从上到下一行行的执行,因此很多人看到这一串代码的时候,会认为由于log之前没有定义a,因此会输出underfind, ...

最新文章

  1. JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。
  2. eclipse系列: Cannot change version of project facet Dynamic web的解决方法
  3. class多项式(链表实现)
  4. linux创建线程未定义,Linux中未定义的对p线程_CREATE的引用
  5. ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL(转)
  6. linux shell取变量的子串26种方法实践
  7. 我的《野蛮生长》书摘
  8. Silverlight C# 游戏开发:项目开发实例和小技巧索引
  9. 达观杯文本智能处理(3)
  10. 《千与千寻》给读者带来了什么?
  11. mysql sjis 校对乱码_数据库乱码问题解决剖析
  12. 地图白话(六):街景地图
  13. 尼古拉特斯拉 名言_尼古拉清洁技术的表面魅力
  14. Vagrant 修改Linux虚拟机内存
  15. 想知道北京的公交线路图吗?用python给你画出来
  16. 韩国5G产品定价及营销策略剖析
  17. 考试计算机输百分比符号,2012年计算机等级考试一级B考点详解(4)
  18. 图像显著性论文(四)—Context-Aware Saliency Detection
  19. Android Studio 常见问题 与 操作指南
  20. 我的第六个项目:实现一个任意图片下载器

热门文章

  1. 如何下载PLSQL Developer历史版本?
  2. P1078 文化之旅(洛谷)
  3. C语言转义字符\数字 八进制和十六进制学习
  4. 14-HBase的介绍、数据模型以及架构模型
  5. 鸿蒙os适配机vivo型,originos系统适配机型有哪些
  6. C++Eigen库矩阵常见操作
  7. 图像识别(二)| 图像的色彩空间
  8. Homebrew - 安装与使用
  9. file_get_contents 访问 ssl 错误的两种解决方法
  10. 0x00000005 3.数据结构和算法 基础数据结构 字符串(上)