[toc]
### 1. 以字面量的方式创建一个数组
* 用字母数字下划线$租车
* 不能用数字开头
```
var arr = [1, 2, 3];
```
### 2. 声明提前
声明提前,先将所有声明的变量,集中到作用域的顶部集中创建,赋值留在原地
```
console.log(a);
var a = 10; //undefined,但不是报错
//undefined: 未赋值但却声明的变量
//在es6中没有声明提前,es6中用'let'声明
```
let 没有声明提前
```js
{
me = 'x' // 暂时性死区报错
let me
}
```
### 3. 严格模式
js声明一个变量,可以不适用var关键字,执行自动补全
```
b = 20;
console.log(b);
//使用严格模式必须使用var关键字
'use strict';
b = 20;
console.log(b);
```
### 4. 全局变量和局部变量
1. 全局变量:在函数外面声明的变量
作用范围:整个window
2. 局部变量:在函数内部声明的变量
作用范围:函数内
3. 在函数内部,声明的变量如果没有使用`var`关键字,则会识别为全局变量
### 5. 解构赋值
当赋值结构两边一致时,可多项赋值
```
let [a, b] = [1, 2];
console.log(a, b); //1, 2
```
### 6. 三种声明方式区别
```
1.在功能上,var 和 let 声明的都可以修改,const 声明的基本类型不可修改,引用类型内部可修改(但是在浏览器控制台不可修改)
2.在块级作用域上,let和const有块级作用域,var没有,所以用var进行for循环,会导致结束后的i值对外界造成影响
3.在声明提前上:var会有声明提前,const 和 let 不会
4.在顶层作用域上用var声明对象,比如控制台中,对象是直接挂载到window上的,但是let和const是在一个块级作用域中
```
#### let
1. 块作用域
2. 比`var`更适合for循环,因为var会导致for循环结束后i的值对外界造成印象
3. 不会让变量预先声明,导致出现`undefined`
#### var
1. 没有块级作用域
2. 会预声明
#### const
1. 常量,无法改变
2. 块级作用域
#### 7.var没有块级作用域,会跳出{}外
```
{
var a = 10
}
console.log(a); // 10
{
let b = 5
console.log(b, '块级内');
}
console.log(b, '块级外'); // 报错
```
#### 8.var 和let都存在函数作用域
函数内,除非不用var声明,不然不会覆盖外层变量
```
var c = "函数外";
function test() {
var c = "函数内"; // 内部不会覆盖外部
}
test();
// console.log(c); // 报错
var d = "函数外d";
function test2() {
d = "函数内d"; // 内部会覆盖外部
}
test2();
console.log(d);
```
- JavaScript
- 1.数组
- 1.数组Api
- 2.判断是否为数组
- 3.手写forEach, map, filter, every, some, reduce
- 4.类数组转化为数组
- 5.reduce实现compose函数
- 7.sort实现与排序
- 2.类型
- 1. let, const, var
- 1. Number 数字
- 3. Boolean 布尔值
- 4. undefined和null
- 2. String 字符串
- 1. 字符串方法
- 2. 操作字符串实例
- 3. startWith&字符串模板
- 5. 类型转换
- 4.深拷贝与浅拷贝
- 7.Symbol类型
- typeof 和 instanceof
- Set
- Map
- 3.this,原型,原型链
- 1.this
- 2.手写call, apply, bind
- 3.模拟new操作符
- 4.手写Object.create
- 4.对象
- proxy代理
- defineProperty数据劫持
- 4.模块化
- 5.http
- ECMAScript
- 0. 调试&兼容性&错误处理
- 3. 运算
- 4. 对象(三种引用类型&正则)
- 1. 数组
- 1. 数组的六种遍历方法
- 2. 数组的增删查改
- 3. 操作数组(展开、join、排序...)
- 4. 补充五种ES6方法
- 2. 函数
- 3. JSON
- 4. 正则
- 附:正则表达式特殊字符
- 5. 面向对象
- es6的继承
- 6. 控制语句
- 7. ajax
- 8. promise
- 9. 闭包
- 1. 闭包产生三个相同随机数
- 2. 闭包实现点赞
- 10.箭头函数
- _isEmpty
- Object.assign(target, obj, obj)
- Math.ceil, round,
- DOM
- 3.1 节点
- 3.2 DOM操作元素
- 3.3 fragment DOM碎片
- 5. 事件
- BOM
- 1. window
- 2. navigation检测访问类型
- 3. screen窗口大小内容大小
- 4. history
- promise
- 1.promise使用
- 2.手写promise
- 3.手写promise.all
- 生成器generator
- 1.generator的使用
- 2.简单实现generator
- 手写async await
- async/await
- 5.防抖节流
- 难点深入
- 1. 浏览器&js特点
- 2. JS堆栈与深浅拷贝
- 3. 详解a++和++a的区别
- 4. JS&jQuery获取元素的方法
- 5. NodeList和HTMLCollection区别
- 6. var与let的区别
- 7. this 与 bind call apply
- 8. get与post请求的区别
- 9. 闭包
- Dom demo
- 1. JQuery--页面点击切换效果
- 2. JQuery-load实现头尾封装
- 3. JS--添加移除属性名
- 4. jQuery--eq()与index()
- 5. table隔行变色
- 6. 改变函数this的指向
- 7. jQuery each遍历
- ECMAScript demo
- 1. 斐波那契数列
- 2. 数组去重
- 3. 自调用函数生成随机数
- 浏览器、DOM
- 1.从输入url到页面加载的全过程
- 2.http与https
- 3.v8垃圾回收机制
- 4.dom事件
- 5.跨域
- 6.强缓存和协商缓存
- 3.eventloop,宏任务和微任务
- 1.什么是任务
- 2.执行顺序例题
- 3.执行顺序例题,添加script
- 4.执行顺序,多个宏任务
- 4.HTTP
- 1.经典五层模型
- 2.http发展历史
- 3.http三次握手
- 4.URI,URL,URN
- 1.http协议
- 2.https
- http状态码
- 5.script标签defer和async区别
- cookie
- connect: keep-alive