变量提升和函数提升哪个优先
问题
首先:普遍认为函数声明提升优于变量提升
但为什么下面的结果是这样的呢(第一个输出我们好理解,因为是先编译后赋值,编译的时候先声明了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声明的优先级
变量提升和函数提升哪个优先相关推荐
- JS函数简单的底层原理 -变量重复声明无效,隐式申明,变量提升,函数提升,以及堆栈内存的变化
JS函数简单的底层原理 (个人理解): 1. 已经使用var申明且赋值,若再次申明,则第二次申明(不赋值)无效. 2.在同一个作用域下,只要是发生了同名,且变量完成赋值,后者会覆盖前者.存在两个相同的 ...
- js 变量提升与函数提升
规则: 函数的提升优先于变量提升.同名的函数会覆盖同名的函数与变量.同名的变量不会覆盖同名的函数. 示例代码1: <!DOCTYPE html> <html lang="z ...
- 函数的自执行,变量提升和函数提升
其实之前虽然刚开始学习JavaScript的时候经常看到function add(){}.var add=function(){}.function(){}之类的这种写法,但是具体是什么叫什么却没有 ...
- JavaScript系列文章:变量提升和函数提升
第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...
- 变量提升以及函数提升
目录 例子 变量提升 函数提升 当函数提升遇到变量提升 例子 function a(){var b = 10function b(){}console.log(b) } a() 结果是10 funct ...
- JS变量提升和函数提升的顺序
1.变量的提升: 变量名会提升到 '当前作用域' 顶部,此时该变量为undefined,未赋值,赋值是在js原位置. console.log(a); // undefined var a = 10 c ...
- js中的变量提升和函数提升——精炼版
javaScript中用var定义变量时存在变量提升(ES6及之后的let/const定义变量时为块级作用域无变量提升,ES6之前js没有块级作用域),比如: console.log(a); // 不 ...
- js高级第一章--变量提升,函数提升
js高级第一章–变量提升,函数提升 文章目录 前言 一.什么是js里的提升? 二.js变量提升 三.js函数提升 四.特殊情况 总结 前言 在js中,最基本的声明方式有三种,即:var,let,con ...
- 那些容易忽略的事3-(变量提升和函数提升)
1.变量提升:只要变量在代码中进行了声明,无论它在哪个位置上进行声明, js引擎都会将它的声明放在范围作用域的顶部: console.log(a); //undefined var a; 2.函数提升 ...
- JS中的变量提升和函数提升
console.log(a); var a = 1 如上面代码中可以看出,由于JS是从上到下一行行的执行,因此很多人看到这一串代码的时候,会认为由于log之前没有定义a,因此会输出underfind, ...
最新文章
- JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。
- eclipse系列: Cannot change version of project facet Dynamic web的解决方法
- class多项式(链表实现)
- linux创建线程未定义,Linux中未定义的对p线程_CREATE的引用
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL(转)
- linux shell取变量的子串26种方法实践
- 我的《野蛮生长》书摘
- Silverlight C# 游戏开发:项目开发实例和小技巧索引
- 达观杯文本智能处理(3)
- 《千与千寻》给读者带来了什么?
- mysql sjis 校对乱码_数据库乱码问题解决剖析
- 地图白话(六):街景地图
- 尼古拉特斯拉 名言_尼古拉清洁技术的表面魅力
- Vagrant 修改Linux虚拟机内存
- 想知道北京的公交线路图吗?用python给你画出来
- 韩国5G产品定价及营销策略剖析
- 考试计算机输百分比符号,2012年计算机等级考试一级B考点详解(4)
- 图像显著性论文(四)—Context-Aware Saliency Detection
- Android Studio 常见问题 与 操作指南
- 我的第六个项目:实现一个任意图片下载器
热门文章
- 如何下载PLSQL Developer历史版本?
- P1078 文化之旅(洛谷)
- C语言转义字符\数字 八进制和十六进制学习
- 14-HBase的介绍、数据模型以及架构模型
- 鸿蒙os适配机vivo型,originos系统适配机型有哪些
- C++Eigen库矩阵常见操作
- 图像识别(二)| 图像的色彩空间
- Homebrew - 安装与使用
- file_get_contents 访问 ssl 错误的两种解决方法
- 0x00000005 3.数据结构和算法 基础数据结构 字符串(上)