JavaScript基础
前端 :针对浏览器的开发,代码在浏览器运行
后端:针对服务器的开发,代码在服务器运行
后端开发模式:MVC
前端:MVC—>MVVM
前端架构
传统架构:多页面,页面跳转根据后端给出的url跳转到新的HTML
SPA:Single-Page——Application,单页架构,页面刷新和内部子页面的跳转完全由js
前后端分离
Ajax——前端应用兴起
智能手机——>多终端支持
后端:REST形式接口
前端:消费后端提供的数据
通信协议:http
网页的生成
1.HTML代码转化为DOM
2.CSS代码转化为CSSOM(CSS Object Model)
3.结合DOM和CSSOM,生成渲染树,包含每个节点的视觉信息
4.生成布局(layout),将所有渲染树的所有节点进行平面整合(耗时)
5.将布局绘制(paint)在屏幕上(耗时)
渲染render
生成布局flow和绘制着两步合称为渲染
网页生成时至少渲染一次,用户访问过程中会不断重新渲染: 1.修改DOM 2.修改样式表 3.用户事件
重新渲染包含:重排(reflow)和重绘(repaint),但绘不一定需要重排,重排必定重绘
JavaScript
JavaScript应用场景
1.网页特效
2.服务端开发(Node.)
3.命令行工具(Node.js)
4.桌面程序(Electron)
5.APP(Cordova)
6.控制硬件(物联网)(Ruff)
7.游戏开发(cocos2d-js)
JavaScript组成
JavaScript:ECMAScript+BOM+DOM
ECMASScript:JS核心,定义了JS的语法规则
BOM:浏览器对象模型,操作浏览器功能的API集合,通过BOM可以操作浏览器窗口
DOM:文档对象模型,操作页面元素的API集合,DOM叭HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操
数组:数组的定义、获取、遍历、新增
函数是一种数据类型,是js中的一等公民,在一些应用中,函数作为数据类型可以作为参数、返回值
1.函数声明方式:function 关键字(命名函数)
2.函数表达式(匿名函数)
3.new Function():执行效率低,较少使用
所有的函数都是Function的实例对象
作用域
全局变量:不使用var声明的变量,关闭网页或浏览器才会销毁
局部变量:固定代码片段内可访问的变量
块级作用域:ES6之前木有
词法作用域:函数允许访问函数外的数据 、 整个代码结构只有函数可以限定作用域 、 若当前作用规则中已有名字,则不考虑外面的名字
闭包
闭包:指有权访问另一个函数作用域中变量的函数
理解:一个作用域可以访问另外一个函数内部的局部变量
作用:延申变量的作用域
案例:计算打车价格(打车起步价13(3公里内),之后每多一公里增加5块钱。用户输入公里数就可以计算打车价格,如果有拥堵情况,总价格多收取10块钱拥堵费)
只有函数可以制造作用域链结构,函数中的函数就形成了函数内指向函数外的链接式结构
预解析过程:
把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升调用
把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用
先提升var,再提升function
自定义对象
无序属性的集合
特征--属性
行为--方法
对象创建方式:对象字面量、new Object( )、工厂函数创建对象、自定义构造函数
new会在内存中创建也给新的空对象
new会让this指向这个新对象
执行构造函数的目的:给这个新对象加属性和方法
new会返回这个新对象
this详解
函数在定义的时候this是不确定的,只有在调用的时候才可以确定
一般函数直接执行,内部this指向全局window
函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象
构造函数中的this是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到这个隐式对象上,后续通过new关键字调用,从而实现实例化
遍历对象属性:通过for...in
删除对象属性:使用delete