JS代码从编译到执行

  我们写出一段JS代码,JS的引擎并不是按照我们书写的顺序从上到下顺序编译并且执行的,首先是按照自己的规则对我们的代码先进行编译,然后从上到下执行编译的代码。

  在全局作用域中,JS首先会对我们的函数进行声明,然后就是我们经常听到的变量提升机制,然后才是按照我们书写代码的顺序,来进行编译,然后在执行编译的代码。

  看如下代码:

function fn(){
console.log(a);
}
fn();
var a = "value";

  非常常见的一个面试题fn函数执行输出undefined,我们按照上面说的JS编译执行的机制来模拟编译后的代码:

function fn(){
console.log(a);
}
var a = undefined;
fn();
a = "value";

  然后按照编译出来的顺序自上而下的来执行我们的代码,可以看出当fn函数执行时a还没有进行赋值,此时的a为undefined。

  在函数作用域中的编译顺序为:首先对函数的存在的参数进行声明,然后是内部的函数,在然后是变量,然后在顺序编译我们书写的代码,假如有如下的代码:

function wrap(a,b){
var c = "c";
var str = a+b+c;
function pirint(){
console.log(str)
}
print();
}
wrap("a","b");

  很标准的一段代码,wrap函数内部模拟编译的代码为:

var a = undefind;
a = "a";
var b = undefined;
b = "b";
function _print(){
console.log(str);
}
var c = undefined;
var str = undefined;
c = "c";
str = a+b+c;
_print();

  弄清JS的执行机制可能并不会让我书写数功能更加强大的代码,但是可以让我们写出更加优雅的代码,其次在做一些笔试题的时候也可以让我们更加的得心应手,在高的墙都是由一块块砖一粒粒细沙垒成的,代码也是一样在复杂的代码也都是以基础的代码作为根基的。

JS基本使用

  代码无论怎么写,基础的知识都是不变的。

  1."."操作符的左边永远是一个对象,右边就是属性(属性值也有可能还是一个对象),结果就是这个属性的属性值。

  2."()"永远都是对一个方法的调用。

  3."()"里面永远都是参数,如果里面的参数是一个表达式,则先执行表达式,然后将表达式执行的结果作为参数。

  例如我们经常使用的JQ的链式操作:$("#demo").html().css();$、html、css都是一个方法名字,而每一个方法都会返回一个对象,从而来实现方便我们开发的链式操作。

JS代码执行机制的更多相关文章

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

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

  2. 浅析JS异步执行机制

    前言 JS异步执行机制具有非常重要的地位,尤其体现在回调函数和事件等方面.本文将针对JS异步执行机制进行一个简单的分析. 从一份代码讲起 下面是两个经典的JS定时执行函数,这两个函数的区别相信对JS有 ...

  3. 深入理解 JS 引擎执行机制(同步执行、异步执行以及同步中的异步执行)

    首先明确两点: 1.JS 执行机制是单线程. 2.JS的Event loop是JS的执行机制,深入了解Event loop,就等于深入了解JS引擎的执行. 单线程执行带来什么问题? 在JS执行中都是单 ...

  4. JS 引擎执行机制

    JS JS 是单线程语音 JS 的 Event Loop 是 JS 的执行机制.类似于 Android Handler 消息分发机制 JS 单线程 技术的出现都跟现实世界里的应用场景密切相关 JS 单 ...

  5. js代码执行顺序问题

      前  言 LiuDaP 今天就给大家介绍一个特别基础的东西,javascript中函数的一点儿小知识(js代码的执行顺序),希望对大家有那么一点点帮助吧!!! 一.js--->单线程 严格意 ...

  6. [js]js代码执行顺序/全局&私有变量/作用域链/闭包

    js代码执行顺序/全局&私有变量/作用域链 <script> /* 浏览器提供全局作用域(js执行环境)(栈内存) --> 1,预解释(仅带var的可以): 声明+定义 1. ...

  7. xss 防止攻击,恶意用户将输入的信息当成html或js代码执行,办法是将用户输入的信息改为text格式,或特殊符号转义

    xss 防止攻击,恶意用户将输入的信息当成html或js代码执行,办法是将用户输入的信息改为text格式,或特殊符号转义 XSS攻击的防范 XSS攻击造成的危害之所以会发生,是因为用户的输入变成了可执 ...

  8. Java虚拟机JVM内存分区及代码执行机制

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt230 1.  JVM体系结构 图1 JVM体系结构    方法区:存放JVM ...

  9. 关于js代码执行顺序

    上网查了一下关于这个方面的资料,大部分都是关于两个script标签中的js代码和变量以及函数提升方面的知识. 1.两个script标签 <script> alert("我是代码块 ...

随机推荐

  1. python 面向对象 公有属性 用在哪里

    公有属性也可以叫做静态字段 如果每个对象都有一个共同的值 , 应该把它设置为公有属性 公有属性使用场景,每个对象中保存相同的东西时,可以使用公有属性 类找公有属性 过程

  2. thinkcmf安装教程与目录结构详解 快速上手版

    最近接了一个建站项目,要求用thinkcmf来搭建,ytkah在想php都大致一样吧,快速地下载安装包,可是!怎么安装呢?没看到安装指引文件或目录,查看了安装说明public目录做为网站根目录,入口文 ...

  3. 【代码片段】Python发送带图片的邮件

    # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import ...

  4. 前端错误提示whitelabel error page

    1:错误提示whitelabel error page:需要定义一个error.html  ,否则提示如图

  5. Spark Shuffle(一)ShuffleWrite:Executor如何将Shuffle的结果进行归并写到数据文件中去(转载)

    转载自:https://blog.csdn.net/raintungli/article/details/70807376 当Executor进行reduce运算的时候,生成运算结果的临时Shuffl ...

  6. cordic算法的verilog实现及modelsim仿真

    1. 算法介绍 CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲 ...

  7. JavaScript修改CSS属性的实例代码

    用原生的javascript修改CSS属性的方法. 用JavaScript修改CSS属性 只有写原生的javascript了.  1.用JS修改标签的 class 属性值:  class 属性是在标签 ...

  8. Scrapy:学习笔记(1)——XPath

    Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...

  9. idea使用插件activate-power-mode给编码加上特效和带来乐趣。

    一.安装. 1. 2. 二.使用. 1. 2.

  10. 系统管理命令之last

    Linux系统中使用以下命令来查看文件的内容: cat  由第一行开始显示文件内容 tac  从最后一行开始显示,可以看出 tac 是 cat 的倒著写! nl   显示的时候,顺道输出行号! mor ...