1
2
3
4
5
6
7
8
9
10
11
12
13
var globalVariable = {
name: "I'm a global variable",
}

function fun() {
var xiaoming = "codereasy";
}

fun();
console.log(window.globalVariable);
console.log(window.xiaoming);
//(1) {name: "I'm a global variable"}
//undefined
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 全局变量可以被视为根, 因此他们是可达的
let globalVariable = {
name: "I'm a global variable",
}

// 函数的参数和内部变量也是可达的
function someFunction(someArgument) {
let functionVariable = {
name: "I'm a variable inside of a function"
};
console.log(someArgument, functionVariable)
}

someFunction(globalVariable);

let objectA = {
objectProperty: {
name: "I'm a property of an object",
}
}

console.log(objectA.objectProperty);
// (1) {name: "I'm a global variable"}
// (1) {name: "I'm a variable inside of a f...}

优点:标记清除法解决了循环依赖的问题
缺点:标记清除法会出现内存碎片