JS 相关概念

标识符

所谓标识符是指变量、函数、属性的名字,或者函数的参数。标识符的书写有几个特征

1.区分大小写: var a=1;
2.第一个字符必须是字母、下划线(_)、或者是$ :var _aa =3; var$$cd=100
3.后面的可以是字母、数字、下划线、$

命名规约

1.使用是实际意义的单词
2.变量使用驼峰规则,第一个单词首字母小写,后面单词首字母大写
3.变量使用名词,方法函数使用动词开头,常量全部用大写字母,函数创建对象首字母大写  
        var firstName;
        var isSmall;
        var hasClass;
        var PI;
        var MAX_COUNT;
        function getName(){}
        function Person(){}

变量

在JavaScript中变量是用来保存值的占位符,定义变量的时候要使用var运算符,
后面跟一个作为名称的标识符即可

var message;

弱类型

在一些编译语言(C、Java、C#)等变量的类型是固定的,在声明变量的时候就要标识其类型,
在程序执行前编译阶段变量的类型就确定了,而且不能改变,我们称之为强类型

int a = 2;
string b = "hello";

一些常见的解释型语言(PHP、JavaScript)等变量的类型是松散的,一个变量可以用来保存任何类型的数据,
变量的类型不是由声明时决定(声明的时候只是用了var运算符),而是在程序执行阶段由其值的类型决定,
随着程序运行其值类型改变,变量类型也会发生改变

var message = 1; //message 类型就是数字
message = "hello world!"; //message 类型变为字符串

语句

语句(statement)是为了完成某种任务而进行的操作,比如下面就是一行赋值语句

var a = 1 + 2;

这条语句先用var运算符,声明了变量a,然后将 1+2 的运算结果赋值给变量a。

JavaScript中语句以;结束,一行可以包含多条语句,如果省略分号不会产生语法错误,
解释器会自动判断语句结束

var sum = 1 + 2
var diff = 3 - 4;

变量提升

JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。
这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升

我们写了一个赋值语句

var a = 2;

实际上执行过程是解释器在未执行的时候先解析出变量声明,然后给他初始值undefined,
然后才逐句执行程序

var a;
a = 2;

::::全局变量

申明前置:
var a=100;
b=10;
console.log(a)
console.log(c)

var c =4
var d =200

注释

并不是所有的语句都会执行,我们可以通过注释功能让js引擎忽略部分语句,
这个功能经常用来解释我们的部分语句,和读书做标注一样

Javascript提供两种注释:一种是单行注释,用//起头;另一种是多行注释,放在/* 和 */之间。

    //为变量赋值
    var a = 1; //赋值成功

    /*
        下面定义个函数
        至于什么是函数
        且听下回分解
    */

    function getName(id){
        return 'Byron';
    }

(HTML的注释 <!--  -->  CSS的注释:/* */)

关键字和保留字

关键字是JavaScript引擎会用到的一些字,我们标识符不能再使用,比如定义变量的关键字var,关键字有

break   else    new var
case    finally return  void
catch   for switch  while
continue    function    this    with
default if  throw   
delete  in  try 
do  instanceof  typeof  
保留字

除了这些不能用作标识符的关键字,js还规定了一些不能用作标识符的保留字,
这些字符没有什么意义,但是未来会用到

abstract    enum    int short
boolean export  interface   static
bye extends long    super
char    final   native  synchronized
class   float   package throws
const   goto    private transient
debugger    implements  protected   volatile
doubler import  public  
实际上一些保留字在新的ECMAscript已经得到使用

认识 JavaScript

网页?
网页 = Html+CSS+JavaScript

Html: 网页元素内容

CSS: 控制网页样式

JavaScript:操作网页内容,实现功能或者效果

javascript

javascript !== java
是客户端脚本语言(指浏览器)
ECMAScript, DOM, BOM, NodeJS(变量,函数,语句,操作浏览器页面上的内容,交互)

引入方式
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>标题</title>
    <link href="index.css" rel="stylesheet">
    <style>
        body{
            background: red;
        }
    </style>
    </head>
    <body>
        <p>
        </p>
        
        
        <script src="index.js"></script>
        <script>
            alert(1);
        </script>
    </body>
    </html>

浏览器渲染机制

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

白屏问题

如果把样式放在底部,对于IE浏览器,在某些场景下(新窗口打开,刷新等)页面会出现白屏,而不是内容逐步展现

如果使用 @import 标签,即使 CSS 放入 link, 并且放在头部,也可能出现白屏(一般情况下不用@import)
chrome是等html,css都出现后的渲染的一个结果
css一般放在body的前面,放到head里面

FOUC (Flash of Unstyled Content) 无样式内容闪烁

如果把样式放在底部,对于IE浏览器,在某些场景下(点击链接,输入URL,使用书签进入等),
会出现 FOUC 现象(逐步加载无样式的内容,等CSS加载后页面突然展现样式).对于 Firefox 
会一直表现出 FOUC .
将JS放在底部
脚本会阻塞后面内容的呈现
脚本会阻塞其后组件的下载
对于图片和CSS, 在加载时会并发加载(如一个域名下同时加载两个文件). 但在加载 JavaScript 时,
会禁用并发,并且阻止其他内容的下载. 所以把 JavaScript 放入页面顶部也会导致 白屏 现象.
加载异步
    <script src="script.js"></script>
没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“立即”指的是在渲染该 script 
标签之下的文档元素之前,也就是说不等待后续载入的文档元素,读到就加载并执行。

    <script async src="script.js"></script>
有 async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。

    <script defer src="script.js"></script>
有 defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),
但 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。

defer:脚本延迟到文档解析和显示后执行,有顺序
async:不保证顺序

基本调试

alert
console.log
打断点
二分法(分成两份,注释点一份,再查找)
(报错是什么,报错的点在哪里,分析问题,解决问题的能力)

参考
高性能网站建设指南, Steve Sounders
Render-tree construction, layout, and paint
How browsers work(http://taligarsiel.com/Projects/howbrowserswork1.htm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 1.JS基本概念 标识符 所谓标识符是指变量、函数、属性的名字,或者函数的参数。 标识符的书写有几个特征:1.区分...
    饥人谷_小侯阅读 337评论 0 0
  • 标识符 所谓标识符是指变量、函数、属性的名字,或者函数的参数。标识符的书写有几个特征: 区分大小写 第一个字符必须...
    yuhuan121阅读 813评论 0 1
  • 标识符 identifier 所谓标识符是指变量、函数、属性的名字,或者函数的参数。标识符的书写有几个特征区分大小...
    _空空阅读 438评论 0 0
  • FreeCodeCamp - Basic JavaScript 写在前面: 我曾经在进谷前刷过这一套题,不过当时只...
    付林恒阅读 16,428评论 5 28
  • 年轻时值得做的二十七件事情: 旅行 学会烹饪 保持经济独立 面对你最恐惧的事情之一 独自生活 完成一个目标 找到你...
    痞boss阅读 238评论 0 1