前端小菜又来了,这些天每天工作,晚上学习太累了。趁星期天给自己放个假。写完这个博客就要出去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有很大的帮助,同时面试时候也都能用得到。的更多相关文章

  1. 试着讲清楚:js代码运行机制

    一. js运行机制 js执行引擎 经常看文章的说到js是带线程的,其实这个说法非常的模糊,准确的是js执行引擎是单线程的,js执行引擎就是js代码的执行器,有了这个概念就可以下来说说js是如何运行的了 ...

  2. js分析 快速定位 js 代码, 还原被混淆压缩的 js 代码

    -1.目录 0.参考 1.页面表现 2. 慢镜头观察:低速网络请求 3. 从头到尾调试:Fiddler 拦截 index.html 并添加 debugger; 4. 快速定位 js 代码 5. 还原被 ...

  3. 《超实用的Node.js代码段》连载三:Node.js深受欢迎的六大原因

    <超实用的Node.js代码段>连载一:获取Buffer对象字节长度 <超实用的Node.js代码段>连载二:正确拼接Buffer Node.js是一种后起的优秀服务器编程语言 ...

  4. 【JS代码压缩】使用YUI Compressor对js文件进行压缩处理

    概述 在使用html5开发Hybird APP的时候,可能会引入大量的js包,另外对于一些核心的js文件,进行一些特殊的处理, 如压缩和加密就显得很重要了,YUI Compressor就是这样一个用于 ...

  5. IE浏览器如何调试Asp.net的 js代码

    不管我们开发什么项目,都需要使用调试.后端的调试比较简单.前端js调试稍微复杂了一点,但是也别怕,因为我们有很多调试前端js代码的浏览器工具.比如IE浏览器.firefox浏览器.chrome浏览器等 ...

  6. selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码

    目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...

  7. 在dcef3当中执行js代码并获得返回值

    1.如何在dcef3当中执行js代码 procedure TForm1.btnWriteZMClick(Sender: TObject);var  js: string;begin  js := 'd ...

  8. 利用ajax获取到的网页源码不能执行js代码

    今天觉得我的博客中加载腾讯微博的速度很慢,所以就想改写为js,本来以为直接新建一个页面,把获取函数移到新的页面中,原来的页面只要使用xmlhttp去GET一下,然后把div的innerhtml属性等于 ...

  9. 一行js代码识别Selenium+Webdriver及其应对方案

    有不少朋友在开发爬虫的过程中喜欢使用Selenium + Chromedriver,以为这样就能做到不被网站的反爬虫机制发现. 先不说淘宝这种基于用户行为的反爬虫策略,仅仅是一个普通的小网站,使用一行 ...

随机推荐

  1. Xcode8控制台乱码的解决方式

    Xcode8里边 Edit Scheme-> Run -> Arguments, 在Environment Variables里边添加 OS_ACTIVITY_MODE = Disable ...

  2. WebADNuke整理

    在webconfig上增添 <webadnuke> <database> <add name="SqlDbProvider" type="C ...

  3. mybatis自增长插入id

    第一种: <insert id="insertUser" parameterClass="ibatis.User"> <selectKey r ...

  4. 【MongoDB初识】-条件操作符

    1.条件>,<,>=,<=在MongoDB中的写法 >:$gt,<:$lt,>=:$gte,<=:$lte,<>:$ne 具体使用方法: d ...

  5. LeetCode 258. Add Digits

    Problem: Given a non-negative integer num, repeatedly add all its digits until the result has only o ...

  6. Linux 利用lsof命令恢复删除的文件

    lsof命令 lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需 ...

  7. 【校验】TCP和UDP的校验和

    一开始,私以为校验和只是简单的求和得到的结果,后来在TCP和UDP里面看到使用的校验和方式有点奇怪--二进制反码(循环进位)求和. 人类的认知过程必将从简单到复杂,看下这个二进制反码循环求和是啥子意思 ...

  8. swift 上手

    学习swift的笔记,偶尔会更新一下 变量与常量 变量定义使用var,常量使用let,类型安全,有自动类型推导,注意赋值的=号两边必须有空格. 变量和常量名是可以几乎所有字符,这些都非常像javasc ...

  9. ajax教程

    本文来自w3school 简介: AJAX = Asynchronous JavaScript and XML 异步的javascript和xml ajax不是新的编程语言,而是一种使用现有标准的新方 ...

  10. 纯css3 Star

    <style><!--* { box-sizing: border-box; padding: 0px; margin: 0px; } body, html { height: 10 ...