注:本文通過yck前端面試小冊學習整理而得,記錄下來供自己查閱
1.var 變數提公升
使用var宣告的變數,宣告會被提公升到作用域的頂部
舉幾個例子:
eg1:
console.log(a) //undefined
var a = 1
可以看做這樣
varaconsole.log(a)
a=1
eg2:
var a = 10vara
console.log(a)
//10
可以看作
vara;var
a;a=10;
console.log(a)
eg3,函式宣告也會提公升,函式提公升會把整個函式挪到作用域頂部:
console.log(a) //ƒ a() {}
var a = 1
function a() {}
看作:
vara;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.let
和const
作用基本一致,但是後者宣告的變數不能再次賦值
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 函式級作用域 塊級作用域...