JS进阶

Time: 2025-03-18 Thursday 23:56:01

JS进阶

作用域

分为函数作用域和块作用域,let和const为块作用域,var为函数作用域,如果什么都不加,就会变成全局变量,浏览器中体现为挂载到window

变量提升

变量提升就是一个变量可以在被声明之前被访问,var声明的变量,变成undefined,下面这个代码会被提升没有这个函数,我记得当时手写jquery时,就是有这个报错,当时半天不知道为什么

image-20241220155329783

构造函数

在JS中,可以直接new一个函数,就变成一个对象了,{}里面的就相当于是构造代码块,this指向实例对象,

image-20241222012445666

两种声明函数的区别

主要在于变量提升和作用域

示例对比

例1:作用域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

function MyConstructor() {
a = function() {
console.log("Assigned function");
};

function b() {
console.log("Declared function");
}

a(); // 正常调用
b(); // 正常调用
}

MyConstructor();

// 外部调用
a(); // 正常调用,a 是全局变量(非严格模式下)
// b(); // 错误,b 不是全局变量

例2:变量提升

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

function MyConstructor() {
b(); // 正常调用,因为函数 b 已被提升
// a(); // 报错,a 尚未赋值

a = function() {
console.log("Assigned function");
};

function b() {
console.log("Declared function");
}
}

MyConstructor();

__proto__和protoType

__proto__是对象具有的,指向构造函数的prototype,而prototype是只有对象函数才有的


JS进阶
http://example.com/2025/03/18/JS进阶/
作者
Jack Asher
发布于
2025年3月18日
许可协议