尚硅谷JavaScript高级学习笔记

01 准备

JavaScript中函数是对象。我们后续描述构造函数的内存模型时,会将构造函数称为构造函数对象。

02 数据类型

typeof 运算符来查看值的类型,它返回的是类型的字符串值


== 会做数据转换

03 相关问题

04数据_变量_内存


05相关问题1





06相关问题2

07对象




08函数



09回调函数

10 lIFE


11 函数中的this



12 关于语句分号问题

13 webstorm设置

14 复习

15、函数的prototype

javascript 复制代码
function Func() { }
console.log(Func);
console.log(Func.prototype);

输出:

每个函数都有一个prototype属性,它默认指向一个0bject空对象(即称为:原型对象)

javascript 复制代码
function Func() { }
console.log(Func.prototype.constructor === Func);// true
console.log(Date.prototype.constructor === Date);// true

给原型对象添加属性、方法,函数的所有实例对象自动拥有原型中的属性(方法)

javascript 复制代码
function Func() { }
Func.prototype.name = "LCM";
Func.prototype.hello = function(){
    console.log("hello world!");
}
let f =  new Func();
console.log(f.name);//LCM
console.log(f.hello());//hello world!

16、显式原型和隐式原型

javascript 复制代码
       function Fun(){}
       console.log(Fun.prototype);

       let f = new Fun();
       console.log(f.__proto__);

       console.log(Fun.prototype === f.__proto__);


__proto__prototype中保存的都是原型对象的地址值。

Fun的prototype、f的__proto__属性什么时候加的?

JavaScript引擎在解析Fun代码的时候就创建了(内部代码应该是:this.prototype={});

f的__proto__在new创建对象的时候加的(this.proto = Fun.prototype )

17、原型链



⭐️⭐️⭐️⭐️⭐️ 记住:实例对象的隐式原型等于构造函数的显式原型;

所有函数对象的隐式原型都是一样的,都是Function对象的原型对象,因为都是new Function产生的();

⭐️⭐️⭐️⭐️⭐️特殊:Function对象的隐式原型和显式原型是同一个

Object构造函数对象的隐式原型也是Function的显式原型。也就是说Object的构造函数对象也是new Funtion()创建的。

18 原型链-补充

19 原型链属性问题

20 探索instanceof

instanceof的作用:左面对象是不是右面构造函数对象的实例

21 原型- 面试题

题1

题2

javascript 复制代码
function Foo() { }

Object.prototype.f1 = function () {
    console.log("f1()");
}
Object.prototype.f2 = function () {
    console.log("f2()");
}

let f = new Foo();
f.f1();// => f1()
f.f2();// => f1()

Foo.f1();// => f1()
Foo.f2();// => f1()

22 变量提升与函数提升

22.1 变量提升

javascript 复制代码
var a = 3;
function fn() {
    console.log(a);// undefined
    var a = 4;
}
fn();

输出undefined,因为上面代码会转化为下面的代码,变量做了提升

javascript 复制代码
var a = 3;
function fn() {
	var a;
    console.log(a);// undefined
    a = 4;
}
fn();

22.1函数提升

23 执行上下文

⭐️⭐️⭐️⭐️⭐️

执行第一行代码前,JavaScript已经准备好了全局上下文,并已经在window对象中添加了属性和方法。注意:此时还没有给对象赋值,方法

23.1 全局执行上下文

23.2 函数执行上下文

调用函数时

第1步:在准备执行函数体之前,会在调用栈创建一个栈帧压入调用栈中。一个函数对应一个栈帧

第2步:对局部数据进行预处理

(1)形參变量==>赋值(实参)>添加为执行上下文的属性
(2)arguments>赋值(实参列表),添加为执行上下文的属性

(3)var定义的局部变量==>undefined,添加为执行上下文的属性

(4)function声明的函数 >赋值(fun),添加为执行上下文的方法水
(5)this>赋值(调用函数的对象)

第3步:开始执行函数体代码

24 执行上下文栈





25 面试题

26 复习

27 作用域与作用域链






自己的作用找不到就向上面的作用域找,一直找到最顶层-全局上下文中。

作用域链

28作用域_面试题


29 循环遍历加监听



javascript 复制代码
 /* 闭包 */
for (let i = 0; i < buttons.length; i++) {
    (function (i) {//这里的i是局部变量
        buttons[i].onclick = function () {
            alert("第" + (i + 1) + "按钮")
        }
    })(i)// 这里的i是全局变量
}

30 闭包理解

什么时候产生闭包,外部函数调用时,包含外部函数数据的内部函数被解析了,此时会产生闭包。

31 常见的闭包

32 闭包的作用

33 闭包的生命周期

34 [闭包,应用_自定义JS模块

(1)方式1


(2)方式2

34-1 闭包的缺点-内存溢出和内存泄漏


35 内存溢出与内存泄露


36 面试题

题1

题2

37 对象创建模式

(1)Object构造函数模式

(2)对象字面量模式




(5)

38 原型链继承

(1) 原型链继承



39 组合继承

(2)借用构造函数


(3)原型链 + 借用构造函数

40 复习

41 闭包终极面试题

42 进程与线程

43 浏览器内核


44 定时器引发的思考


45 js是单线程执行的

46 事件循环模型


47 H5 web Workers多线程




48 复习

相关推荐
前端菜鸟日常8 分钟前
vue2和vue3的按需引入的详细对比通俗易懂
javascript·vue.js·ecmascript
Long_poem13 分钟前
【自学笔记】Spring Boot框架技术基础知识点总览-持续更新
spring boot·笔记·后端
程楠楠&M1 小时前
uni-app(位置1)
前端·javascript·uni-app·node.js
破z晓1 小时前
uniapp 整合openlayers 编辑图形文件并上传到服务器
前端·javascript·uni-app
贩卖纯净水.1 小时前
REACT学习DAY02(恨连接不上服务器)
服务器·学习·react.js
祈澈菇凉2 小时前
除了Axios,如何用fetch处理403错误?
前端·javascript·vue.js
JSON_L2 小时前
Vue Axios
前端·javascript·vue.js
南风过闲庭2 小时前
操作系统研究
大数据·人工智能·科技·学习·ai·系统架构
狐凄2 小时前
练习题:47
开发语言·前端·javascript
没有晚不了安2 小时前
1.16作业
java·前端·javascript