浏览器执行js代码的机制--对于我们深入了解js有很大的帮助,同时面试时候也都能用得到。
前端小菜又来了,这些天每天工作,晚上学习太累了。趁星期天给自己放个假。写完这个博客就要出去high了。鸡冻。接下来进入正题啦,
你可能要问,我们学习这个有什么用啊?这样我先给大家来个小小的面试题。
alert(a);
C1: var a = 1;
F2: function a() {
alert(2);
}
alert(a);
c2: var a = 3;
alert(a);
F2: function a() {
alert(3)
}
alert(a);
如果你知道答案,那么恭喜你,接下来别听我bb了。如果你会有疑惑的话,那么还是老老实实的咱们一块理理这个知识点。
js解析器工作步骤:1:准备工作,把var定义的变量和function声明的函数开一个内存存储起来-也就是咱们通常讲的作用域,当遇到变量则只存储变量名而不进行赋值,当遇到
函数,则把整个函数体当作字符串存进去。这时候,你会问了当我的变量名和函数名冲突了怎么办?浏览器默认是这样处理的。当函数名和变量名冲突的时候会优先选择函数。当生命两个
一样的变量名,那么后边的会覆盖前边的。2,执行工作,一行一行的执行代码当遇到变量则从解析器中获取进行计算处理。
咱们先看一下上边的这个例子:第一步,先存储变量名和函数名,依次存入内存的是c1,f1,c2,f2,他们的名字都是一样的。因此函数把变量覆盖,f2在f1后边定义的,f2把f1覆盖了。所以当我们执行的时候
首先输出f2的函数体,即一个字符串,里边是函数的整个函数体,接下来给a赋值1。那么这时候alert(a)就是输出1了,接着走到c2,给a赋值3那么接下来就是输出3了。好了,分析完毕。如果大家有不同见
解或者不清楚的,欢迎大家留言评论。可以出去high了。
浏览器执行js代码的机制--对于我们深入了解js有很大的帮助,同时面试时候也都能用得到。的更多相关文章
- 试着讲清楚:js代码运行机制
一. js运行机制 js执行引擎 经常看文章的说到js是带线程的,其实这个说法非常的模糊,准确的是js执行引擎是单线程的,js执行引擎就是js代码的执行器,有了这个概念就可以下来说说js是如何运行的了 ...
- js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码
-1.目录 0.参考 1.页面表现 2. 慢镜头观察:低速网络请求 3. 从头到尾调试:Fiddler 拦截 index.html 并添加 debugger; 4. 快速定位 js 代码 5. 还原被 ...
- 《超实用的Node.js代码段》连载三:Node.js深受欢迎的六大原因
<超实用的Node.js代码段>连载一:获取Buffer对象字节长度 <超实用的Node.js代码段>连载二:正确拼接Buffer Node.js是一种后起的优秀服务器编程语言 ...
- 【JS代码压缩】使用YUI Compressor对js文件进行压缩处理
概述 在使用html5开发Hybird APP的时候,可能会引入大量的js包,另外对于一些核心的js文件,进行一些特殊的处理, 如压缩和加密就显得很重要了,YUI Compressor就是这样一个用于 ...
- IE浏览器如何调试Asp.net的 js代码
不管我们开发什么项目,都需要使用调试.后端的调试比较简单.前端js调试稍微复杂了一点,但是也别怕,因为我们有很多调试前端js代码的浏览器工具.比如IE浏览器.firefox浏览器.chrome浏览器等 ...
- selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码
目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...
- 在dcef3当中执行js代码并获得返回值
1.如何在dcef3当中执行js代码 procedure TForm1.btnWriteZMClick(Sender: TObject);var js: string;begin js := 'd ...
- 利用ajax获取到的网页源码不能执行js代码
今天觉得我的博客中加载腾讯微博的速度很慢,所以就想改写为js,本来以为直接新建一个页面,把获取函数移到新的页面中,原来的页面只要使用xmlhttp去GET一下,然后把div的innerhtml属性等于 ...
- 一行js代码识别Selenium+Webdriver及其应对方案
有不少朋友在开发爬虫的过程中喜欢使用Selenium + Chromedriver,以为这样就能做到不被网站的反爬虫机制发现. 先不说淘宝这种基于用户行为的反爬虫策略,仅仅是一个普通的小网站,使用一行 ...
随机推荐
- 苹果mac电脑中brew的安装使用及卸载详细教程
brew 又叫Homebrew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件, 只需要一个命令, 非常方便 brew类似ubuntu系统下的apt-get的功能 安装br ...
- AutoCAD .net 开发 SelectionFilter Foreach Linq 性能比较
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 【爬虫】Python2 爬虫初学笔记
爬虫,个人理解就是:利用模拟“操作浏览器”的过程,自动获取我们想要的数据(或者说信息,比如图片啊) 为何要学爬虫:爬取数据,为我所用(相当于可以把一类数据整合起来) 一.简单静态网页爬虫架构: 1.B ...
- 2016-1-29 图解HTTP(04)
第7章 确保Web安全的HTTPS 在HTTP协议中有可能存在信息窃听或身份伪装等安全问题.使用HTTPS通信机制可以有效的防止这些问题. 7.1 HTTP的缺点 ● 通信使用明文(不加密),内容可能 ...
- pair的使用
#include<iostream> #include<cmath> #include<cstdio> #include<algorithm> #inc ...
- 从业十余年谈谈对dotnet看法与坚持
前言 园子经常在讨论关于.Net发展的问题,我也这些年在工作乃至创业过程中使用.Net碰到的一些问题和看法.个人擅长的技术面,C/C++/MFC/STL.ASM.JAVA.VB.Javascript/ ...
- Docker中images无法使用apt-get update解决方案
问题描述:使用apt-get update一直fail 原因:DNS设置错误 解决办法: nm-tool #查看DNS后面的数(IPv4),将后面的数copy下来 sudo nano /etc/def ...
- Log4j按级别输出到不同文件
log4j.properties 文件: log4j.logger.net.sf.hibernate.cache=debug log4j.rootLogger = error,portal_log,s ...
- spring注解配置实例
在spring中使用注解配置前需要先在配置文件指定需要扫描的包. 通过注解的方式依赖注入,可以不用创建set方法,也不用在xml文件中申明注入关系. 实例结构如下: 整个流程是: 先创建好数据库的表对 ...
- 纯css3 Star
<style><!--* { box-sizing: border-box; padding: 0px; margin: 0px; } body, html { height: 10 ...