尚硅谷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 复习

相关推荐
Bubluu1 分钟前
浏览器点击视频裁剪当前帧,然后粘贴到页面
开发语言·javascript·音视频
鎈卟誃筅甡13 分钟前
Vuex 的使用和原理详解
前端·javascript
m0_6896182816 分钟前
数学建模助力干细胞研究,配体纳米簇如何影响干细胞命运
笔记·数学建模
呆呆小雅18 分钟前
二、创建第一个VUE项目
前端·javascript·vue.js
m0_7482393325 分钟前
前端(Ajax)
前端·javascript·ajax
Fighting_p28 分钟前
【记录】列表自动滚动轮播功能实现
前端·javascript·vue.js
前端Hardy30 分钟前
HTML&CSS:超炫丝滑的卡片水波纹效果
前端·javascript·css·3d·html
Domain-zhuo1 小时前
Git和SVN有什么区别?
前端·javascript·vue.js·git·svn·webpack·node.js
羊村懒哥1 小时前
tomcat-安装笔记(包含虚拟主机配置)
java·笔记·tomcat
百流1 小时前
scala基础学习_运算符
开发语言·学习·scala