Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >重学JS基础-预编译

重学JS基础-预编译

作者头像
Jou
发布于 2022-08-10 12:54:10
发布于 2022-08-10 12:54:10
46400
代码可运行
举报
文章被收录于专栏:前端技术归纳前端技术归纳
运行总次数:0
代码可运行

预编译

1.JS代码的执行步骤

  1. 语法分析: 主要扫描代码有没有语法上的错误(比如少些括号,写了中文符号)
  2. 预编译: 进行变量的声明提升,函数整体提升,函数执行前一刻的准备工作。
  3. 解释执行: 对js代码进行执行,解释一行,执行一行。

2.预编译的前奏

  1. 暗示全局变量:任何变量未经声明就赋值,此变量归全局所有。
  2. 一切全局变量都是window的属性

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 100;
console.log(window.a); //100
if(1){
    a = 10;
}
console.log(window.a); //10

3.预编译

脚本代码块script执行前,系统执行的操作

  1. 创建一个GO对象,即window全局对象
  2. 查找全局变量声明(包括隐式全局变量声明,省略var声明),变量名作全局对象的属性,值为undefined
  3. 查找函数声明,函数名作为全局对象的属性,值为函数引用

例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(a);     //undefined
console.log(func);  //func
var a = 100;
function func(){
    return 1;
}
注意:
  1. let和const也会有变量提升,但是在声明之前并不能访问到,因为存在一个暂时性死区。
  2. 函数声明出现在 if 等语句中的情况有点复杂,它仍然作用于脚本、模块和函数体级别,在预处理阶段,仍然会产生变量,它不再被提前赋值,所以下面的代码打印undefined。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

console.log(foo);
if(true) {
    function foo(){

    }
}
  1. with关键字能改变代码块内的作用域,所以在使用的时候需要格外注意。这里打印2和underfined,因为在foo函数中,a会被变量提升,但是赋值的时候指定了对象o的作用域,所以只改变了o.a的值。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 1;

function foo() {
    var o= {a:3}
    with(o) {
        var a = 2;
    }
    console.log(o.a);
    console.log(a);
}

foo();
  1. class 声明在全局的行为跟 function 和 var 都不一样。在 class 声明之前使用 class 名,会有变量提升,但是会抛错。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(c);
class c{

}

4.函数执行上下文

函数在执行前会先做下面的操作 1) 创建一个AO对象(执行期上下文) 2) 找到函数体中定义的变量和函数形参,变量名作为AO的属性名,值为undefined 3) 将实参和形参统一 4) 将定义的函数名挂在AO的属性中,值为函数体。 如果有兴趣,可以看一下这一道面试题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = 100;
function demo(e){
    function e(){}
    arguments[0] = 2;
    console.log(e);
    if(a){
        var b = 123;
        function c(){}
    }
    var c;
    a = 10;
    var a;
    console.log(b);
    f = 123;
    console.log(c);
    console.log(a);
}
var a;
demo(1);
console.log(a);
console.log(f);

打印结果是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2
undefined
undefined
10
100
123
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实战 | 记一次诡异的网站篡改应急响应
2021年1月6日下午的16点左右,本来还要在摸两个点的鱼就可以飞法法的下班了,照例下班前把安全设备都看了一遍,一刷新系统蹦出几条某某大学下的大量二级域名网站被篡改的告警,随后经过人工验证所有告警的二级网址均存在被篡改页面,并随即报告给了值班客户,随后应客户要求兴(hao)高(bu)采(qing)烈(yuan)地到了现场做应急处置,至于为什么称之为诡异请看下述分析。
HACK学习
2021/11/12
1.6K0
windows 应急流程及实战演练
当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。
信安之路
2018/10/18
3.1K0
windows 应急流程及实战演练
应急实战(9):一次简简单单的应急
日常登录服务器,看到桌面的“masScan_1.6”文件夹,心中一片窃喜:来活了!
OneMoreThink
2024/10/15
1080
应急实战(9):一次简简单单的应急
记一次Windows下的应急过程
在一个夜黑风高的夜晚,正在酣眠突然手机响起,电话那头传来了同事焦急的声音。某用户服务器被入侵了,需要进行调查取证,但是关键数据已经被运维人员删除,需要我们协助处理一下……
FB客服
2021/03/09
4240
记一次Windows下的应急过程
Windows应急响应
当企业发生入侵事件、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。
亿人安全
2022/06/30
2K0
Windows应急响应
从暗链到文件上传漏洞,一次一波三折的应急
HTML里确实有暗链,定性中危。第一反应是某位员工又直接复制粘贴的某个网页,连暗链一起贴了过来,或者误引用某个互联网上的网页,而那个站点因为某些原因现在变成了垃圾站点。于是建议网站管理员直接删除对应文章即可。
红队蓝军
2023/12/13
4630
从暗链到文件上传漏洞,一次一波三折的应急
应急响应之入侵排查
那么多代码里不可能我们一点点去找后门,另外,即使最好的Webshell查杀软件也不可能完全检测出来所有的后门,这个时候我们可以通过检测文件的完整性来寻找代码中隐藏的后门。
FB客服
2021/02/08
1.2K0
微软:IIS 扩展正越来越多地用作 Exchange 后门
据Bleeping Computer网站7月26日消息,微软 365 Defender 研究团队在当天公布的一项研究调查中表示,攻击者正越来越多地使用恶意 Internet 信息服务 (IIS) Web 服务器扩展,对未打补丁的 Exchange 服务器部署后门。 与Web Shell相比,利用IIS 扩展能让后门更加隐蔽,通常很难检测到其安装的确切位置,并且使用与合法模块相同的结构,为攻击者提供了近乎完美的持久性机制。 根据微软 365 Defender 研究团队的说法,在大多数情况下检测到的实际后门逻
FB客服
2023/03/30
4430
微软:IIS 扩展正越来越多地用作 Exchange 后门
记一次IIS劫持处置
晚上十一点四十,刚准备休息,收到朋友电话,其一个站点被入侵篡改,导致某web接口异常,帮忙远程处理。
FB客服
2019/12/23
3.1K0
记一次IIS劫持处置
记一次入侵应急响应分析
2018年12月06日,我司“云悉”互联网安全监测平台监测到某政府单位网站存在被植入恶意链接。我司“捕影”应急响应小组进行分析后确认为真实入侵事件后,立即进入应急响应。
FB客服
2019/05/09
1.8K0
记一次入侵应急响应分析
网站被植入Webshell的解决方案
从字面上理解,”Web”指需要服务器开放Web服务,”shell”指取得对服务器的某种程度的操作权限。Webshell指匿名用户(入侵者)通过网站端口,获取网站服务器的一定操作权限。
黑伞安全
2019/10/16
2.3K0
网站被植入Webshell的解决方案
【应急响应】windows入侵排查思路
当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。
Bypass
2019/07/08
2.8K0
【应急响应】windows入侵排查思路
【应急响应】redis未授权访问致远程植入挖矿脚本(防御篇)
0 前言 应急响应这一专题,本来并没有打算写。正如公众号的说明所言,比较想分享安全测试、漏洞赏析、渗透技巧、企业安全,其中特别是企业安全建设,这也是当初离职的初衷--到甲方看看安全怎么做?从另一个角度来全新的认识安全,同时也将在乙方的积累尽情发挥,做更多新鲜的、有挑战性的、安全落地的事情。 记得刚到公司不久,便遇到安全事件发生。因为之前没有人处理过、没人会太在意,所以当我看到时、非常吃惊大家的不在意,内网几台服务器被远程植入挖矿脚本,情况别说有多么危急了。 1 安全事件描述 1
aerfa
2018/06/12
2.2K0
记一次C/S架构客户端配置文件泄露导致的内网沦陷
注:由于目标单位所用的web系统以及服务器都是比较老的机子,所以可能没有很高的技术含量,不足之处还望批评指正。
F12sec
2022/09/29
1.7K0
记一次C/S架构客户端配置文件泄露导致的内网沦陷
记编辑器漏洞引发的应急处理
作为一个网站管理员,你没发现的漏洞,你的对手却帮你找到了,并在你的网站里留下了Webshell。这个时候对抗就开始了,找出漏洞根源,捕获攻击者,赢下这场对抗,这个过程本身就挺有意思的。
Bypass
2021/06/25
5330
记编辑器漏洞引发的应急处理
说说Windows安全应急响应
随着网络安全的快速发展,不少的互联网公司都积极的参与到了这个领域,随着《网络安全法》颁布与实施、等保2.0的颁布等为网路安全发展提供了有力的后盾。一个事物的快速发展,也会引起其它不利的事物萌芽。不错,就是网络入侵事件的出现,说白了就是黑产。比如Facebook泄露的8700万用户数据、前程无忧招聘网站求职信息的泄露、华住下多个连锁酒店5亿信息泄露、万豪喜达屋用户信息泄露等。
FB客服
2019/08/26
2.9K0
说说Windows安全应急响应
应急响应处置流程Windows篇
文档在自己的文件夹静静的躺了快半年了,好吧,先把应急响应流程步骤(乙方视角)和windows拆出来,在进行应急响应事件处置时需严格遵守公司的应急响应制度。
FB客服
2019/06/03
1.4K0
【愚公系列】《网络安全应急管理与技术实践》 016-网络安全应急技术与实践(Web层-应急响应技术总结)
Web安全事件应急响应技术是指针对Web应用程序遭受风险和安全漏洞的事件,如网络攻击、数据泄露、恶意软件等,迅速采取措施进行监测、分析和应对的技术手段。
愚公搬代码
2024/09/18
2590
【应急响应】Where-1S-tHe-Hacker-P1
韩一是划水通信公司的一名安服,某天在日常巡检的过程中发现客户网站被入侵并挂了黑页,他意识到自己需要应急哥的帮助,于是他毫不犹豫地给你打电话。请你找出攻击痕迹并还原攻击链,服务器已经处于网络隔离状态,排查出并清理攻击者留存的恶意文件,将web服务恢复正常,保证服务器不存在安全问题,在做应急处置、溯源的过程中请给发现存在的脆弱点加固建议
Al1ex
2025/02/12
1240
【应急响应】Where-1S-tHe-Hacker-P1
应急响应之windows入侵排查篇
应急响应(Incident Response Service,IRS)是当企业系统遭受病毒传播、网络攻击、黑客入侵等安全事件导致信息业务中断、系统宕机、网络瘫痪,数据丢失、企业声誉受损,并对组织和业务运行产生直接或间接的负面影响时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,同时分析入侵原因、还原入侵过程、评估业务损失、溯源黑客取证并提出解决方案和防范措施,减少企业因黑客带来的相关损失。本文主要讨论windows被入侵后的排查思路。
FB客服
2021/09/16
2.2K0
推荐阅读
相关推荐
实战 | 记一次诡异的网站篡改应急响应
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验