
function addTen(num) {
num += 10;
return num;
}
let count = 20;
let result = addTen(count);
console.log(count); // 20
console.log(result); // 30
function setName(obj) {
obj.name = "Nicholas";
}
let person = new Object();
setName(person);
console.log(person.name); // "Nicholas"
function setName2(obj) { // 此处是按值传入
obj.name = "Nicholas";
obj = new Object(); // 所以修改obj的指向会影响外部person2的指向
obj.name = "Greg";
}
let person2 = new Object();
setName2(person2);
console.log(person2.name); // "Nicholas"执行上下文主要有全局上下文和函数上下文两种(eval()调用内部存在第三种上下文),但有其他方式来增强作用域链。 以下两种情况会在作用域链前端添加一个变量对象。
JS是使用垃圾回收的语言,即执行环境负责在代码执行时管理内存。基本思路:确定那个变量不会再使用,然后释放它占用的内存。回收过程是周期性自动运行的。主要标记策略:标记清理和引用计数。
将内存占用量保持在一个较小的值可以让页面性能更好。优化内存占用的最佳手段就是保证在执行代码时只保存必要的数据。如果数据不再必要,就设置为null,从而释放引用(解除引用)。
通过const和let声明提升性能
隐藏类和删除操作
function Article() {
this.title = 'Inauguration Ceremony Features Kazoo Band';
this.author = 'Jake';
}
let a1 = new Article();
let a2 = new Article();
a1.author = null;内存泄漏
静态分配与对象池
开发者无法直接控制什么时候开始收集垃圾,但可以间接控制触发垃圾回收的条件。理论上,如果能够合理使用分配的内存,同时避免多余的垃圾回收,那就可以保住因释放内存而损失的性能。浏览器决定何时运行垃圾回收程序的一个标准就是对象更替的速度。一个策略是使用对象池。在初始化的某一时刻,可以创建一个对象池,用来管理一组可回收的对象。应用程序可以向这个对象池请求一个对象、设置其属性、使用它,然后在操作完成后再把它还给对象池。