js预编译习题解题思路

2023-11-06

js预编译习题解题思路

   function fn(a,c) {
        console.log(a) // function a
        var a = 123
        console.log(a) // 123
        console.log(c) // function c
        function a() {}
        if (false) {
            var d =678
        }
        console.log(d) // undefined
        console.log(b) // undefined
        var b = function () {}
        console.log(b) // function 
        function c() {}
        console.log(c)// function c
    }
    fn(1,2)

解题思路:

先走预编译阶段、再走代码逐行解释阶段

1、编译阶段

js在作用域创建阶段(预编译阶段):

1、js的变量对象创建AO对象供js引擎访问

2、找形参和变量的声明,作为AO对象的属性名,值为undefined

3、实参和形参值相统一

4、找函数声明,会覆盖变量的声明

变量或参数的声明 步骤2 步骤3 步骤4 预编译结果
a undefined 1 function a() {} function a() {}
c undefined 2 function c() {} function c() {}
d undefined undefined
b undefined undefined

AO对象:

// 产生的AO对象
// 根据预编译阶段 var修饰的内容进行变量提升、函数提升
// AO:{
//     a:function a() {} 
//     c:function c() {}
//     d:undefined
//     b:undefined
// }

2、代码逐行解释阶段

按照代码逻辑重上向下读代码

答案:

function a
123
function c
undefined
undefined
function 
function c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js预编译习题解题思路 的相关文章

  • 在 iPad 上调试 Javascript

    我想知道人们是否找到了任何有用的工具来在未越狱的 iPad 上调试 javascript 这是一款用于工作的 iPad 因此无法越狱 通过一些繁琐的步骤 我已经在 iPad 上运行了 firebug lite 但是我的 javascript
  • Jquery文件上传插件进度条

    这个插件 https github com blueimp jQuery File Upload wiki管理网页中的文件上传 并且可以在上传过程中添加很多 UI 元素 您创建一个输入文件类型元素 然后绑定 js 文件 使用实例化代码和 w
  • 共享工作线程在重新加载页面时终止

    为什么 Shared Worker 在重新加载页面时死掉了 应该是复活了我该如何解决这个问题 重新加载前 重新加载后 在 example com 上按 F5 家长工人 var port new SharedWorker app worker
  • JS 在两个或多个点之间画线

    我需要在两个标签或标签之间画一条线 Example http caitriona github io connect the dots http caitriona github io connect the dots 我需要做这样的事情
  • 在 Node.js 中包含另一个文件中的 JavaScript 类定义

    我正在为 Node js 编写一个简单的服务器 并且使用我自己的类 名为User看起来像 function User socket this socket socket this nickname null just the typical
  • 弃用警告:时刻构造回退到 js Date

    我正在尝试转换这个日期时间 150423160509 这是 utc 日期时间 改为以下格式 2015 04 24 00 05 09 本地时区 通过使用 moment js var moment require moment timezone
  • 从 ES6 模块导入函数表达式或函数声明有什么区别?

    据我了解 参见第 16 3 2 1 节 http exploringjs com es6 ch modules html ES6 允许函数 类导出操作数使用不同的语法 区别在于导出的函数是否需要在导入时解释为函数声明 在这种情况下 您可以编
  • Express JS:请求的资源上不存在“Access-Control-Allow-Origin”标头

    我有一个在服务器上运行的 API 和一个连接到它以检索数据的前端客户端 我对跨域问题做了一些研究并使其发挥作用 但我不确定发生了什么变化 我现在在控制台中收到此错误 XMLHttpRequest 无法加载https api mydomain
  • 如何将查询参数添加到守卫中的路由并将其传递给 Angular 4 中的组件?

    我在我的 Angular 4 应用程序中使用路由保护 如果条件满足并返回 true 我想向路由添加一个查询参数 这是我一直在研究的代码 Injectable export class ViewGuardService implements
  • 在each() 和forEach() 中使用break 和 continue

    如果我们不能使用 break 和 continue 关键字 我不确定我是否理解函数式循环 映射的价值 我可以做这个 collections users models forEach function item index can t use
  • 在Javascript中将RGB数组转换为RGBA数组的快速方法

    我正在使用的模拟器在内部存储 RGB 值的一维帧缓冲区 但是 HTML5 画布在调用 putImageData 时使用 RGBA 值 为了显示帧缓冲区 我当前循环遍历 RGB 数组并以某种方式创建一个新的 RGBA 数组与此类似 https
  • 处理时区转换的 JavaScript 库

    是否有一个 JavaScript 库可以处理时区转换 并考虑 DST 规则和此类内容 我知道有类似的问题 但我见过的问题似乎都没有真正适合我的问题的答案 我想在时区 A 创建一个日期并能够对其进行操作 添加天数 小时等 然后将其转换为另一个
  • Webpack - 资产大小限制中的警告:以下资产超出了建议的大小限制 (244 KiB)

    当我在生产模式下运行 webpack 时 有资产规模限制 超出 的警告 我怎样才能运行而不出现这个错误 在我的项目中 我包含 css 并且我看到 webpack 构建中包含一些 node module 目录 但是如果我排除 css 的 no
  • Google 地图 Javascript v3 折线点击事件

    我正在尝试显示一张地图 其中有多条路线布置为折线 单击多段线时 我想显示特定于该线的数据 将数据与线关联不是问题 但无论单击哪条线 显示的数据都会与最近绘制的线关联 就好像每条新折线都会覆盖最后一条线一样 我有一个数据库 其中包含 gpx
  • JavaScript/jQuery - “$ 未定义 - $function()”错误

    我正在尝试运行 JavaScript jQuery 函数并且Firebug http en wikipedia org wiki Firebug 28software 29得到错误 is not defined function JavaS
  • 带有桌子的嵌套表

    我在应用了表排序器的表中嵌套了表 它在嵌套表中添加了排序标题 但是它们没有对行进行排序 并且抛出了JavaScript错误 我想拥有 嵌套表不可排序 巢表上的排序实际上可以工作 但不是现状 您的第一个选择要容易得多 使嵌套表不可排序 像这样
  • Kendo 刷新 (DropDownList.refresh()) 不起作用错误未定义

    我试图在另一个 DropDownList 更改后刷新下拉列表 但 Refresh 方法未定义错误正在升级 我尝试再次读取数据源 它显示它正在加载 但数据仍然相同 帮助解决这个问题请 Code DropDownList1 change fun
  • 检测 html 选择框上的编程更改

    有没有办法让 HTML 选择元素在每次以编程方式更改其选择时调用函数 当使用 JavaScript 修改选择框中的当前选择时 IE 和 FF 都不会触发 onchange 此外 更改选择的 js 函数是框架的一部分 因此我无法更改它以在结束
  • javascript从字符串创建不区分大小写的正则表达式

    我试图通过以不区分大小写的方式将输入与正则表达式匹配来进行验证 正则表达式作为对象上的字符串从服务中下来 我可能会得到类似的东西 regex ane 我可以执行以下操作 var rx new RegExp object regex The
  • “memset”没有 DLL 那么如何 ctype 它

    如何使用memset在 jsc 类型中 没有对应的 DLL 我搜索 搜索了 js ctype 代码 但找不到要破解的示例 如果你只是想memset一个数组为零字节 然后我有 好消息 大家 js ctypes 会将新数组初始化为零 否则 最简

随机推荐

  • snpintf()函数会自动添加\0, strncpy()函数不会自动增加\0

    近段时间 在写程序中多次用到snprintf 函数 对于snprintf 函数是否会自动添加 0不能肯定 今天自己就写了一个测试程序进行验证 int len snprintf buf sizeof buf s str 1 当len 的长度小
  • 内核角度谈谈Linux进程和线程

    目录 前言 内核对进程和线程的表示 创建进程的过程 创建线程的过程 创建进程和线程的异同 揭秘 do fork 系统调用 结论 前言 昨天面试的时候 面试官问我了个平平淡淡的问题 gt 聊聊Linux中进程和线程 相比大家不管是在考试还是面
  • OpenWrt系统安全改进<五> --- Web 访问权限分级

    摘要 OpenWrt系统安全改进 lt 四 gt 中介绍的只是在UI层面对用户进行访问控制 对于深层次非法操作并不能起到保护效果 本节介绍针对不同的用户登录请求 使用不同用户启动luci进程 从而实现不同用户进行操作级别的访问控制 机制分析
  • git push -u origin master提示 fatal: repository 'https://gitlab.com/xx.git/' not found

    正解 1 git remote set url origin https gitlab用户名 gitlab com xx demo git 2 git push u origin master 会提示输入密码 输入入正确的gitlab密码即
  • Error tokenizing data. C error: Buffer overflow caught - possible malformed input file.

    data self reader read nrows File pandas libs parsers pyx line 796 in pandas libs parsers TextReader read File pandas lib
  • dl_iterate_phdr

    http www helplib net s linux die 65 1099 man 3 dl iterate phdr shtml http linux die net man 3 dl iterate phdr dl iterate
  • 跨域错误问题has been blocked by cors policy

    这个问题其实是一个跨域调用错误 有多种解决方法 我放到服务器上所以在服务器上的apache的配置文件中修改 一开始以为apache的配置文件是httpd conf 然后发现我压根没有这个文件 在 etc apache2 apache2 co
  • 单手杀穿经典链表题Pt.1——LeetCode天梯渡劫(移除节点,反转链表,中间节点)

    目录 传统艺能 移除链表元素 反转链表 链表的中间结点 传统艺能 小编是双非本科大一菜鸟不赘述 欢迎大佬指点江山 QQ 1319365055 此前博客点我 点我 请搜索博主 知晓天空之蓝 乔乔的gitee代码库 打灰人 欢迎访问 点我 非科
  • 终端配色-Docker容器终端

    20230309 0 引言 平时使用SSH 通常都是使用securecrt来用 毕竟也算是之前windows下一种使用的工具 在mac下使用还算方便 进入终端后 可以通过调整配色来调整编程环境 平时经常使用屎黄色的那种配色 毕竟柔和 偶尔使
  • 计算机的快速启动栏,电脑快速启动栏不见了

    文章目录导航 演示系统及适用范围 演示系统 XP专业版 Windows2003企业版 WIN7旗舰版 适用范围 XP各版本 WIN2003 WIN2008及WIN7各版本系统 xp找回快速启动栏方法 不管是XP或是Winserver2003
  • conda修改环境保存地址

    可以在命令行中通过conda config指令进行修改 如 添加环境目录envs dirs conda config add envs dirs F conda env envs 添加pkgs dirs conda config add p
  • MVC模式、MVVM模式及其区别

    文章目录 MVC模式 MVVM模式 MVVM优点 MVC与MVVM的区别 MVC模式 MVC是应用最广泛的软件架构之一 一般MVC分为 Model 模型 View 视图 Controller 控制器 这主要是基于分层的目的 让彼此的职责分开
  • BUUCTF刷题记录(6)

    文章目录 web FBCTF2019 RCEService GYCTF2020 FlaskApp CISCN2019 华北赛区 Day1 Web5 CyberPunk BSidesCF 2019 Futurella CISCN2019 华东
  • 【STM32技巧】ADC模拟量采集的几种用法

    1 AD单次转换 软件启动 通过程序启动AD AD采集一次 我们就去读一次 这种情况 建议开启AD转换完成中断 在中断中读出AD值并做处理 初始化的时候 启动一次 然后在主循环里 每隔一秒启动一次 在中断回调函数里 进行相关处理 电脑输出如
  • python实现交换排序

    排序算法 python实现基数排序 python实现归并排序 python实现交换排序 python实现选择排序 python实现插入排序 冒泡排序 基本思想 假设待排序表长为n 从后往前或者从前往后两两比较相邻元素的值 若为逆序则交换它们
  • fatal: Authentication failed for又不弹出用户名和密码 解决办法

    各位 如果能弹出来 一定是你账号密码搞错了 就别继续看了 image png 切换命令行 image png 依然报错 说到这个问题 又可以长篇大论了 我使用的是tortoisegit window电脑平常都是用ppk文件组合 netrc文
  • 51单片机---IE寄存器,TCON寄存器,TMOD寄存器

    寄存器IE 中断允许寄存器IE的作用 是控制所有中断源的开放或禁止 以及每个中断源是否被允许 寄存器IE的位格式如下 EX0 外部中断0允许位 EX0 1 允许外部中断0中断 EX0 0 禁止外部中断0中断 ET0 T0溢出中断允许位 ET
  • KNN学习之图像分类与KNN原理

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 简介 KNN算法 即K近邻算法是一种监督学习算法 本质上是要在给定的训练样本中找到与某一个测试样本A最近的K个实例 然后统计k个实例中所属类别计数最多的那个类 就是A的类
  • Java进阶(2) - 特殊对象(Class类)

    存在的意义位于java lang包下 和java lang reflect包下的类共同支持java反射功能jvm在类加载时 在堆中为每个类生成一个Class对象 用于记录每个类的属性 方法等信息 同时每个对象生成时都有特殊的标记位来指向堆中
  • js预编译习题解题思路

    js预编译习题解题思路 function fn a c console log a function a var a 123 console log a 123 console log c function c function a if