美文网首页前端相关
JS变量提升,浏览器渲染原理

JS变量提升,浏览器渲染原理

作者: DeeJay_Y | 来源:发表于2017-08-10 11:21 被阅读11次

标识符

定义变量,函数,属性的时候的标识符,是区分大小写的。
第一个字符必须是字母_$
后面的还可以是数字。

变量提升

js的引擎工作方式是,先解析代码,获取所有的被声明的变量,然后再一行一行地运行。所以,所有变量的声明语句,都会被提升到代码的头部,称为变量提升。
var a =2;这个赋值语句,进行解析时,

  var a;
  a =2;

,先解析出变量声明,a的初始值为undefined,然后才逐句执行程序。
举例:

    var a = 100;
    b = 10;
    console.log(a);
    console.log(c);
    
    var c = 20;
    var d = 30;
    

解析完成后的代码其实为:

        var a;
        var c;
        var d;
    //    变量提升


        a = 100;
        b = 10;
        console.log(a); // 100
        console.log(c); //undefined

        c = 20;
        d = 30;

浏览器渲染机制

  1. CSS和JS在网页中的放置顺序是怎样的?
    css样式一般要使用link标签放到顶部。body的前面,即head标签内。
    对于js,一般要将js放在底部,因为脚本会阻塞后面内容的呈现以及后面组件的下载。
    css加载的时候是允许并发加载的,但是对于js来说,会禁用并发并且阻止其他内容的下载,所以当把js放到顶部的时候也可能会出现白屏现象。

  2. 白屏问题和FOUC
    如果把样式放在底部,对于IE浏览器,在某些场景下(新窗口打开,刷星等)页面会出现白屏,而不是逐步展现内容。
    另外,如果使用@import,即使CSS放入link,并且放在头部,也可能出现白屏。
    FOUC(flash of unstyled content),无样式内容闪烁,如果把样式放在页面底部,对于IE浏览器,在某些场景下(点击链接,输入url,使用书签进入等),会出现FOUC现象(即逐步加载无样式的内容,等到CSS全部加载完成之后页面突然展现样式。)对于firefox会一直表现出FOUC。

  3. 加载异步,async和defer

  • <script src="xxx.js"></script>没有defer和async,浏览器会立即加载并且执行指定的脚本,即不等待后续载入的文档元素,读到就加载并执行。
  • <script async src="xxx.js"></script> 有async,加载和渲染后续文档元素的过程将和script.js的加载与执行并行进行(即异步)
  • <script defer src="xxx.js"></script>有defer,加载后续文档元素的过程将和script.js的加载并行进行(异步),但是script.js的执行要在所有的元素解析完成之后,将DOMContentLoaded事件触发之前完成。
  • defer和async的区别: defer脚本延迟到文档解析和显示之后才执行,是由顺序的。而async不保证顺序。

4.浏览器的渲染机制

  • 解析HTML标签,构建DOM树
  • 解析CSS标签,构建CSSOM树
  • 把DOM和CSSOM组合成渲染树(render tree)
  • 把渲染树的基础上进行布局,计算每个节点的几何结构
  • 把每个节点绘制到屏幕上(painting)

5.基本调试的方法

  • alert
  • console.log
  • 设置断点
  • 二分法

相关文章

  • 01-撩课大前端—面试宝典—第一篇

    1. var的变量提升的底层原理是什么? 2. JS如何计算浏览器的渲染时间? 3. JS的回收机制? 4. 垂直...

  • 撩课-Web大前端每天5道面试题-Day1

    1. var的变量提升的底层原理是什么? 2. JS如何计算浏览器的渲染时间? 3. JS的回收机制? 4. 垂直...

  • JS变量提升,浏览器渲染原理

    标识符 定义变量,函数,属性的时候的标识符,是区分大小写的。第一个字符必须是字母,_和$。后面的还可以是数字。 变...

  • 浏览器学习笔记-JS执行

    变量提升 变量提升原理浏览器对js是先编译后执行,在编译过程中,js中的变量声明会被提升到代码段落前面。函数声明和...

  • 深入理解JavaScript之变量提升

    变量提升 原理:JS引擎的工作方式是先解析代码,获取所有被声明的变量;然后在运行。JS代码自上而下执行之前,浏览器...

  • 小皆学前端—主流浏览器的内核浅析

    浏览器内核,包括浏览器渲染引擎和JS解析引擎。负责对网页的语法进行解释并渲染(渲染再我另外一篇文章浏览器的渲染原理...

  • 前端学习计划

    基础是关键,框架是加分项。 基础部分: HTML CSS 浏览器渲染原理 服务器渲染原理 网络相关 JS基础《Ja...

  • 浏览器原理相关视频课程

    大话浏览器渲染原理浏览器渲染原理和打开网页机制HTTPS 网络协议原理解析从零开始,彻底掌握浏览器渲染原理深入V8...

  • 前端性能优化-渲染优化

    一、浏览器渲染原理和关键渲染路径 浏览器渲染原理:读取html,css文本,构建DOM树。(DOM ,CSSOM)...

  • H5 浏览器渲染原理浅析

    待续 参考 浏览器的渲染:过程与原理 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理 浏览器页面资源加载...

网友评论

    本文标题:JS变量提升,浏览器渲染原理

    本文链接:https://www.haomeiwen.com/subject/gcxolxtx.html