分别介绍一下原型、原型链、作用域和作用域链的含义和使用场景
含义
-
原型:每个对象都有一个prototype(原型对象)
-
原型链:当访问一个对象的属性时,如果在该对象找不到的话,就会寻找该对象的原型,以及该对象的原型的原型,层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾,这样形成的一条链称为原型链。
-
作用域:可访问变量的集合。
-
作用域链:寻找一个变量时,在当前作用域找,如果没有,就往上一层作用域找,层层向上搜索,直到找到该变量或者到最外层作用域,这样形成的链为作用域链。
-
闭包:定义在一个函数内部的函数,内部函数可以使用外部函数的变量。
作用:闭包函数里面的变量不被外部污染,不被释放。
优点:保护变量不被污染
缺点:导致内存泄漏
闭包之应用场景:
1、函数作为参数被传递:
function print(fn) {
const a = 200;
fn();
}
const a = 100;
function fn() {
console.log(a);
}
print(fn); // 100
2、函数作为返回值被返回:
function create() {
const a = 100;
return function() {
console.log(a);
};
}
const fn = create();
const a = 200;
fn(); // 100
3、缓存工具,隐藏数据,只提供 API 。
function createCache() {
const data = {}; // 闭包中被隐藏的数据,不被外界访问
return {
set: function(key, val) {
data[key] = val;
},
get: function(key) {
return data[key];
},
};
}
const c = createCache();
c.set("a", 100);
console.log(c.get("a")); // 100