变量提升和函数提升哪个优先

news/2024/7/19 13:23:58 标签: js, javascript

问题

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

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

javascript">console.log(typeof a); // function

var a = 1;

function a(){}

console.log(typeof a); // number

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

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

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

javascript">console.log(typeof a); // function

var a = 1;

function a(){}

console.log(typeof a); // number

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

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


http://www.niftyadmin.cn/n/1585753.html

相关文章

mysql5.7.18安装

下载linux 源码包 名称 mysql-5.7.18.tar.gz 其他版本不是源码包 例如:i386是32编译好的,x86_64是64位的yum -y install boostcmake -DCMAKE_INSTALL_PREFIX/usr/local/mysql -DSYSCONFDIR/etc -DMYSQL_DATADIR/usr/local/mysql/data -DMYSQL_TCP_PO…

一道考察范围挺广的题

知识点 new 等运算符的优先级settimeout 函数和立即执行函数的作用域是全局作用域。但没有this 的话,比如本来应该是this.a改成 a 的话, 就会遵循作用域链函数提升优先于变量提升,但最后的赋值结果看谁是最后赋值的,函数在预编译…

阻止事件冒泡\事件捕获 [无废话版]

(一) 前言 1.1 Dom 事件流 捕获阶段处于目标阶段冒泡阶段 DOM事件流中,实际的目标在捕获阶段不会接收到事件,下一个阶段是处于目标阶段,这时事件被触发,最后进入事件冒泡阶段。我们认为处于目标阶段是事件冒泡阶段的一部分。 …

学习boot笔记

响应式导航栏 1、保证在窄屏时需要折叠的内容必须包裹在带一个div内&#xff0c;并且为这个div加入collapse、navbar-collapse两个类名。最后为这个div添加一个class类名或者id名。 2、保证在窄屏时要显示的图标样式&#xff08;固定写法&#xff09;&#xff1a;< button c…

JS 运算符优先级

参考文章:都2020了&#xff0c;还不懂js运算符优先级&#xff1f; MDN 解释运算符优先级

Android统计图的绘制( MPChartLib 的使用)

为什么80%的码农都做不了架构师&#xff1f;>>> 最近一直在研究Android 图形块的内容&#xff0c;绘制统计图肯定是要去学的&#xff1b;在自己写之前&#xff0c;首先要借鉴下别人写的&#xff1b;先学学别人的&#xff1b;我把对MPChartLib 的使用总结一下&#…

浏览器渲染原理的学习与总结

参考文章&#xff1a;浏览器渲染原理 浏览器渲染原理 1. 进程和线程 进程包涵线程, 微信是一个进程, 里面有很多诸如用户登录等线程. a.线程共享内存, 进程独立内存: 进程与进程之间是相互独立的, 他们各自有各自的内存, 而线程之间是独立的, 但他们共享同一个内存空间. …

likely, unlikely的作用

在项目中看到了likely、unlikely宏的使用, 一直不是非常清楚它们的作用,所以就深究下。 likely表示被測试的表达式大多数情况下为true, unlikely则表示相反。两个宏定义: #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) 这两个…