[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