柯里化/偏函数/变量提升/垃圾回收机制
2020-12-24 本文已影响0人
永恒即是最美
柯里化:fn(a,b,c) ==> fn(a)(b)(c)
function getAddress(province,city,area){
return province + city + area;
}
getAddress('浙江省','杭州市','西湖区'); //浙江省杭州市西湖区
柯里化后:
function getAddress(province){
return function (city) {
return function (area) {
return province + city + area;
}
}
}
let city = getAddress('浙江省')('杭州市');
city('西湖区'); //浙江省杭州市西湖区
city('拱墅区'); //浙江省杭州市拱墅区
city('上城区'); //浙江省杭州市上城区
偏函数:fn(a,b,c) ==> fn(a,b)(c)
function getAddress(province,city){
return function (area) {
console.log(province + city + area);
}
}
let city = getAddress('浙江省','杭州市');
city('西湖区'); //浙江省杭州市西湖区
city('拱墅区'); //浙江省杭州市拱墅区
city('上城区'); //浙江省杭州市上城区
变量提升:
let和const不存在变量提升,而var存在。当一段代码块中存在let或者const时,从代码块开始就形成一个封闭作用域,称为暂时性死区。
垃圾回收机制:
1.引用计数法:定义一个变量,引用计数+1。当变量为null时,计数为零,被回收
2.标记清除法:为两个阶段,标记阶段和清除阶段:
(1)标记阶段:垃圾收集器会从根对象(Window对象)出发,扫描所有可以触及的对象,这就是所谓的可抵达
(2)清除阶段:在扫描的同时,根对象无法触及(不可抵达)的对象,就是被认为不被需要的对象,就会被当成垃圾清除