ES6部分知識點總結

2022-03-24 18:22:38 字數 3135 閱讀 5083

注:本文通過yck前端面試小冊學習整理而得,記錄下來供自己查閱

1.var 變數提公升

使用var宣告的變數,宣告會被提公升到作用域的頂部

舉幾個例子:

eg1:

console.log(a) //

undefined

var a = 1

可以看做這樣

var

aconsole.log(a)

a=1

eg2:

var a = 10

vara

console.log(a)

//10

可以看作

var

a;var

a;a=10;

console.log(a)

eg3,函式宣告也會提公升,函式提公升會把整個函式挪到作用域頂部:

console.log(a) //

ƒ a() {}

var a = 1

function a() {}

看作:

var

a;function

a() {}

console.log(a)

//ƒ a() {}

a = 1

2.var,let,const對比

1.在全域性作用域下,var宣告的變數,會掛載到window上,其他二者不會

2.三者都存在提公升,但是let,const的提公升和var不同:雖然變數在編譯的環節中就被告知在這塊作用域中可以訪問,但是訪問是受限制的(形成暫時性死區):

所以let const必須先宣告後使用

var a = 1;

function

test1()

function

test2()

test1() //1

test2() //

error, a is undefined

3.letconst作用基本一致,但是後者宣告的變數不能再次賦值

3.模組化

3.1為什麼要模組化?

1、解決命名衝突

2、易於復用

3、增強可維護性

3.2實現模組化的方法有哪些?各有什麼特點?

1、立即執行函式

通過函式作用域解決了命名衝突和汙染全域性作用域的問題

return出對外介面

(function

(val)

return

})(value)

2.cmd和amd

//

amd 非同步載入模組

define(['./a', './b'], function

(a, b) )

//cmd

define(function

(require, exports, module) )

3.commonjs 仍在廣泛使用

關鍵字 require module.exports

//

a.js

module.exports =

//or

exports.a = 1

var module = require('./a.js')

module.a

//-> log 1

4.es module

//

匯出模組 api

export default

function() {} //

a.js 整塊匯出

export function b() {} //

b.js 匯出多個部分,每塊有自己的名字

//引入模組 api

import x from './a.js'import from './b.js'

4.proxy

let proxy = new proxy(target, handler)

攔截,**。用於自定義物件中的操作

vue3.0中用proxy來代替原有的object.defineproperty來實現資料響應式

簡版例子

//

用reflect上的靜態方法確保原有的set,get行為,用setbind, getlogger部署額外的監聽功能

let onwatch = (obj, setbind, getlogger) =>,

set(target, property, value, receiver)

} return

newproxy(obj, handler)

}let obj =

let p =onwatch(

obj,

(v, property) =>改變為$`)

},(target, property) =>' =$`)

})p.a = 2 //

監聽到屬性a改變

p.a //

'a' = 2

5.陣列方法

map, filter, reduce

map:生成新陣列。遍歷原陣列,將原陣列的每個元素拿出來做出一些變換後,放入新陣列並返回

filter:生成新陣列。遍歷原陣列時,將返回值為true的元素放入新陣列,並返回。用於刪除一些不需要的元素

它們都接收三個引數:當前元素,索引,原陣列

reduce:累加器

const arr = [1, 2, 3]

const sum = arr.reduce((acc, current,index,arr) => acc + current, 0)

console.log(sum)

//6

const reducearray = arr.reduce((acc, current) =>, )

console.log(maparray, reducearray)

//[2, 4, 6]

reduce接收兩個引數:**函式和初始值

**函式有4個引數:累計值(不限資料型別),當前元素,當前索引,原陣列

ES6知識點總結

面向過程和物件導向的對比 面向過程 物件導向 物件 物件是由屬性和方法組成的 類 class 在 es6 中新增加了類的概念,可以使用 class 關鍵字宣告乙個類,之後以這個類來例項化物件 物件導向的思維特點 抽取 抽象 物件共用的屬性和行為組織 封裝 成乙個類 模板 對類進行例項化,獲取類的物件...

ES6部分語法

1 當物件的key和value名稱一致時,可以縮寫成乙個。components 等同於 components 2 data 等同於data function data 等同於 data function 3 是箭頭函式 render function h 也等同於 render h 4 在es6語法...

ES6知識點簡單總結

let宣告的變數只能在所處遇到的快級有效。不存在變數提公升。暫時性死區,不受外部 影響。在乙個大括號中使用let關鍵字宣告的變數才具有塊級作用域,var關鍵字不具有這個特點 具有塊級作用域。使用const關鍵字宣告的常量必須賦值。常量賦值後值不能更改。varletconst 函式級作用域 塊級作用域...