Skip to content

Commit 215f5f0

Browse files
committed
update
1 parent 707f918 commit 215f5f0

File tree

8 files changed

+199
-1
lines changed

8 files changed

+199
-1
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ https://github.com/webVueBlog/Leetcode
1313

1414
欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star (此仓库每天都会准时更新)
1515

16-
## 😉 阶段十二(333
16+
## 🥰 阶段十二(340
1717

1818
<details open>
1919
<summary>展开查看</summary>
@@ -27,6 +27,13 @@ https://github.com/webVueBlog/Leetcode
2727
- 331.[String 类型](./阶段十二/String类型.js)
2828
- 332.[Symbol 类型](./阶段十二/Symbol类型.js)
2929
- 333.[Object 类型](./阶段十二/Object类型.js)
30+
- 334.[函数](./阶段十二/函数.js)
31+
- 335.[原始值与引用值](./阶段十二/原始值与引用值.js)
32+
- 336.[动态属性](./阶段十二/动态属性.js)
33+
- 337.[复制值](./阶段十二/复制值.js)
34+
- 338.[传递参数](./阶段十二/传递参数.js)
35+
- 339.[typeof 操作符](./阶段十二/确定类型.js)
36+
- 340.[执行上下文与作用域](./阶段十二/执行上下文与作用域.js)
3037

3138
</details>
3239

阶段十二/传递参数.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
3+
ECMAScript 中所有函数的参数都是按值传递的。
4+
5+
变量有按值和按引用访问,而传参则只有按值传递。
6+
7+
在按值传递参数时,值会被复制到一个局部变量(即一个命名参数,或者用 ECMAScript 的话说,就是 arguments 对象中的一个槽位)。在按引用传递参数时,值在内存中的位置会被保存在一个局部变量,这意味着对本地变量的修改会反映到函数外部。
8+
9+
function addTen(num) {
10+
num += 10;
11+
return num;
12+
}
13+
let count = 20;
14+
15+
let result = addTen(count);
16+
console.log(count); // 20,没有变化
17+
console.log(result); // 30
18+
19+
20+
function setName(obj) {
21+
obj.name = "Nicholas";
22+
}
23+
let person = new Object();
24+
setName(person);
25+
console.log(person.name); // "Nicholas"
26+
27+
28+
function setName(obj) {
29+
obj.name = "Nicholas";
30+
obj = new Object();
31+
obj.name = "Greg";
32+
}
33+
let person = new Object();
34+
setName(person);
35+
console.log(person.name); // "Nicholas"
36+
37+
38+
当 obj 在函数内部被重写时,它变成了一个指向本地对象的指针。而那个本地对象在函数执行结束时就被销毁了。
39+
40+
*/
41+
42+
function setName(obj) {
43+
obj.name = "Nicholas";
44+
obj = new Object();
45+
obj.name = "Greg";
46+
console.log(obj.name)
47+
}
48+
let person = new Object();
49+
setName(person);
50+
console.log(person.name); // "Nicholas"

阶段十二/函数.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
3+
函数的基本语法:
4+
function functionName(arg0, arg1,...,argN) {
5+
statements
6+
}
7+
8+
注意 最佳实践是函数要么返回值,要么不返回值。只在某个条件下返回值的函数会带来麻烦,尤其是调试时。
9+
10+
严格模式对函数也有一些限制:
11+
函数不能以 eval 或 arguments 作为名称;
12+
函数的参数不能叫 eval 或 arguments;
13+
两个命名参数不能拥有同一个名称。
14+
15+
*/

阶段十二/动态属性.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
3+
对于引用值而言,可以随时添加、修改和删除其属性和方法。
4+
5+
let person = new Object();
6+
person.name = "Nicholas";
7+
console.log(person.name); // "Nicholas"
8+
9+
原始值不能有属性,尽管尝试给原始值添加属性不会报错。
10+
11+
let name = "Nicholas";
12+
name.age = 27;
13+
console.log(name.age); // undefined
14+
15+
16+
let name1 = "Nicholas";
17+
let name2 = new String("Matt");
18+
name1.age = 27;
19+
name2.age = 26;
20+
console.log(name1.age); // undefined
21+
console.log(name2.age); // 26
22+
console.log(typeof name1); // string
23+
console.log(typeof name2); // object
24+
25+
*/

阶段十二/原始值与引用值.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
通过变量使用原始值与引用值
3+
4+
理解执行上下文
5+
6+
理解垃圾回收
7+
8+
ECMAScript 变量可以包含两种不同类型的数据:原始值和引用值
9+
10+
原始值(primitive value)就是最简单的数据
11+
12+
引用值(reference value)则是由多个值构成的对象。
13+
14+
原始值:Undefined、Null、Boolean、Number、String 和 Symbol。
15+
16+
保存原始值的变量是按值(by value)访问的
17+
18+
引用值是保存在内存中的对象。
19+
20+
在操作对象时,实际上操作的是对该对象的引用(reference)而非实际的对象本身。
21+
22+
保存引用值的变量是按引用(by reference)访问的。
23+
24+
*/

阶段十二/复制值.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/**
2+
3+
在把引用值从一个变量赋给另一个变量时,存储在变量中的值也会被复制到新变量所在的位置。
4+
5+
复制的值实际上是一个指针,它指向存储在堆内存中的对象
6+
7+
*/
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
3+
执行上下文(以下简称“上下文”)
4+
5+
变量或函数的上下文决定了它们可以访问哪些数据,以及它们的行为。每个上下文都有一个关联的变量对象(variable object),而这个上下文中定义的所有变量和函数都存在于这个对象上。
6+
7+
上下文在其所有代码都执行完毕后会被销毁,包括定义在它上面的所有变量和函数
8+
9+
当代码执行流进入函数时,函数的上下文被推到一个上下文栈上。
10+
11+
在函数执行完之后,上下文栈会弹出该函数上下文,将控制权返还给之前的执行上下文。
12+
13+
ECMAScript程序的执行流就是通过这个上下文栈进行控制的。
14+
15+
上下文中的代码在执行的时候,会创建变量对象的一个作用域链(scope chain)。这个作用域链决定了各级上下文中的代码在访问变量和函数时的顺序。代码正在执行的上下文的变量对象始终位于作用域链的最前端。
16+
17+
如果上下文是函数,则其活动对象(activation object)用作变量对象。
18+
19+
活动对象最初只有一个定义变量:arguments。(全局上下文中没有这个变量。)
20+
21+
作用域链中的下一个变量对象来自包含上下文,再下一个对象来自再下一个包含上下文。以此类推直至全局上下文;全局上下文的变量对象始终是作用域链的最后一个变量对象。
22+
23+
代码执行时的标识符解析是通过沿作用域链逐级搜索标识符名称完成的。搜索过程始终从作用域链的最前端开始,然后逐级往后,直到找到标识符。
24+
25+
var color = "blue";
26+
function changeColor() {
27+
let anotherColor = "red";
28+
function swapColors() {
29+
let tempColor = anotherColor;
30+
anotherColor = color;
31+
color = tempColor;
32+
// 这里可以访问 color、anotherColor 和 tempColor
33+
}
34+
// 这里可以访问 color 和 anotherColor,但访问不到 tempColor
35+
swapColors();
36+
}
37+
// 这里只能访问 color
38+
changeColor();
39+
40+
*/

阶段十二/确定类型.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
3+
typeof 操作符最适合用来判断一个变量是否为原始类型
4+
5+
let s = "Nicholas";
6+
let b = true;
7+
let i = 22;
8+
let u;
9+
let n = null;
10+
let o = new Object();
11+
console.log(typeof s); // string
12+
console.log(typeof i); // number
13+
console.log(typeof b); // boolean
14+
console.log(typeof u); // undefined
15+
console.log(typeof n); // object
16+
console.log(typeof o); // object
17+
18+
ECMAScript 提供了 instanceof 操作符
19+
20+
21+
console.log(person instanceof Object); // 变量 person 是 Object 吗?
22+
console.log(colors instanceof Array); // 变量 colors 是 Array 吗?
23+
console.log(pattern instanceof RegExp); // 变量 pattern 是 RegExp 吗?
24+
25+
*/
26+
27+
console.log(typeof '1');
28+
29+
console.log('1'
30+
instanceof Object); // false

0 commit comments

Comments
 (0)