Javascript预解析

news2024/11/24 6:26:43

1.我们js引擎运行js 分为两步,1.预解析,2.执行代码

(1)预解析:js引擎会把js里面所有的var还有function提升到当前作用域发的前面

(2)执行代码:按照代码书写的顺序从上往下执行

2.预解析分为 变量预解析(变量提升)和 函数预解析(函数提升)

(1)变量提升:就是把所有的变量声明提升到当前的作用域最前面,不提示赋值操作。

这里在var num = 10;之前进行console.log(num);之所以能输出undefined而不报错是因为js进行了预解析,把var num;操作提到了该作用域的最前面,但是没有把赋值提前,所以运行到console.log(num)时,num变量已经存在但没有进行赋值操作,所以输出undefined而不报错。

这里在前面直接调用fun(),运行结果是报错了,是因为这里的fun是个变量,不是函数,所以提升是把var fun;被提升到前面后(未进行赋值,也就是未进行函数定义),进行fun(),此时fun()函数未被定义,所以调用fun肯定会直接报错。

(函数表达式 调用必须写在函数表达式的下面)

2)函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数  

 

而这里的function fn(){xxx}是函数声明,会被提升到当前作用域的最前面,所以fn()放在前面也能正常运行。

 

例子:手写出下列案例实际运行效果的代码

 =》

var num;
function fun() {
    var num;
    console.log(num);
    num = 20;
}
num=10;
fun();

提升之后代码一眼清晰,根据作用域链看console.log(num)上面这个var num就知道输出的是undefined。

 

=》

var num;
function fn() {
    var num;
    console.log(num);
    num=20;
    console.log(num);
}
num=10;
fn();

 输出结果是undefined和20。

=》

function f1() {
    var a;
    a = b = c = 9;
    console.log(a);
    console.log(b);
    console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);

 结果是 99999+报错

因为f1函数体中只有a进行了变量声明,b和c进行了赋值没有进行变量声明,所以是b,c作为全局变量,a是函数体内的局部变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3588平台开发系列讲解(进程篇)进程的处理器亲和性

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、简介二、相关结构体三、函数接口四、cpuset的使用沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇介绍进程的处理器亲和性相关知识。 一、简介 Linux进程调度器为了充分利用CPU资源,会将进程在不同的…

如何养成整洁的代码习惯

如何养成整洁的代码习惯前言1.为什么要保持代码整洁?1.1 所以从一开始就要保持整洁1.2 如何写出整洁的代码?2.命名2.1 不好的命名方式1.没有任何意义的命名方式2.命名前后不一致3.命名冗余3.类3.1单一职责3.2 开闭原则3.3 内聚4.函数4.1 只做一件事4.2 函数命名1.函数名应见名…

春季开学必备物品清单、数码好物推荐篇

开学的脚步近了,近了,大学生返校,万物更新,大家迎接开学季的阵仗堪比迎接春天了。灵魂发问:开学装备备齐了吗?大学生们的情绪调整好了吗?自己要不要再回回炉,充充电?这次…

【redis6】第十二章(持久化)

RDB RDB是什么 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的SNAPSHOT快照,它恢复时是将快照文件直接读到内存里 备份是如何执行的 Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写…

ARM学习(17)ARM函数调用规则

笔者来聊聊ARM的函数的调用规则 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&…

观点动力学模型:主要理论与模型综述

文章目录意见动态建模图论DeGroot 模型Friedkin-Johnsen models社会权力演变自我评价反映的演变DeGroot-Friedkin模型(DeGroot)的新研究最终社会权力的分析动态相对互动拓扑相似时间尺度,记忆和噪声表达观点(expressed opinion)和私人观点(private opinion)EPO模型意…

学完python再学Java顺利吗,学完python再学Java要多久

这篇文章主要介绍了学完python再学C会不会轻松一点,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 1、学编程先学python,然后学java可以吗? 建议先学J…

solidity Dapp 从签名中提取消息签名地址

通常, ECDSA(椭圆曲线数字签名算法)包含两个参数, r 和 s. 在以太坊中签名包含第三个参数 v,它可以用于验证哪一个账号的私钥签署了这个消息。 Solidity 提供了一个内建函数 ecrecover 它接受 r, s and v 作为参数并且返回签名这的地址。我们如何进行测试…

Windows使用WinSW实现开机自启动服务

在windwos系统中,有时候需要java的jar开机自启动,或者nginx的开机自启动,或者内网穿透工具(frp)的开机自启动,使用WinSW是一种很好的选择,记录一下使用WinSW实现的方式WinSW开源和下载地址(最新版WinSW v2.…

从0开始学python -14

Python3 字符串 -1 字符串是 Python 中最常用的数据类型。我们可以使用引号( ’ 或 " )来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: var1 Hello World! var2 "Runoob"Python 访问字符串中的值 Python 不支持…

Springboot2.x+Websocket+js实现实时在线文本协同编辑,并展示协同用户

文章目录诉求相关技术思路展开相关步骤pom配置服务端相关配置文本信息、用户广播处理逻辑前端功能代码功能测试小结诉求 实现页面实时在线文本协同编辑,且显示当前同时编辑文本的用户。 相关技术 Springboot(2.7.0)Websocketjavascript 思路展开 页面展示当前登陆用户页面有…

NANK南卡护眼台灯Pro新品测评:旗舰级护眼,降低80%近视风险!

对于重度熬夜患者来说,对于家居用品是非常偏爱的,而最主要的就是光源问题,护眼台灯的发展迅速,不再局限于简单照明,在写作和办公、绘画的场景都适用,经常在电脑桌上的我,就看到了这款旗舰级专业…

9个 Intellij IDEA中使用Debug调试详解

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 Debug用来追踪代码的运行流…

java数据输入

数据输入1.1数据输入概述1.2 Scanner使用的基本步骤导包创建对象接收数据

Windows内核--任务、进程和线程(2.4)

图片来自: Windows内核原理与实现 Windows内核有"任务"概念吗? 从技术术语来说,Windows内核并没有"任务"。"任务"一般被认为是抽象的需要执行的事情。在不同操作系统上,"任务"所代表的官方名称有所差异。 Linu…

树形表查询

树形表: 情况一:固定层级的树形表: 可以使用表的自连接查询,比如查询两级分类课程 selectone.id one_id,one.name one_name,one.parentid one_parentid,one.orderby one_orderby,one.label one_label,two.id two_id,two.name two_name,two.parentid two_parentid,two.orderby …

系统公告 | MemFire Cloud应用管理全新升级,实时数据库等你来体验~

“超能力”数据库~拿来即用,应用开发人员再也不用为撰写API而发愁。MemFire Cloud 为开发者提供了简单易用的云数据库(表编辑器、自动生成API、SQL编辑器、备份恢复、托管运维),很大地降低开发者的使用门槛。 MemFire …

计算机视觉OpenCv学习系列:第九部分、视频读写

第九部分、视频读写第一节、视频读写处理1.视频标准与格式2.视频读写与函数3.代码练习与测试学习参考第一节、视频读写处理 1.视频标准与格式 视频标准与格式: SD(Standard Definition)标清480PHD(High Definition)高清720P/1080PUHD(Ultra High Definition)超高清…

100 个手把手、掏心窝子IDEA快捷键从入门到精通教程

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 一、构建/编译 Ctrl F9&…

c++函数返回数组类型

c函数返回数组类型 首先,C 不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 方法一:将返回值定义…