title | date | tags | categories |
---|---|---|---|
记录些概念性的知识 |
2021-03-13 17:38:24 -0800 |
前端 |
前端 |
DTD告诉浏览器这个文件是什么类型,浏览器根据类型来使用什么引擎去渲染他解析他
DOCTYPE告诉浏览器当前文档是哪个DTD
function Foo () {
getName = function() {console.log(1)}
return this
}
Foo.getName = function() {console.log(2)}
Foo.prototype.getName = function() {console.log(3)}
var getName = function() {console.log(4)}
function getName () {console.log(5)}
Foo.getName()
getName()
Foo().getName()
getName()
new Foo.getName()
new Foo().getName()
new new Foo().getName()
new 无参数列表的时候可以省略括号 看着优先级去解决问题
- 创建一个新的对象
- 继承父类原型上的方法. Object.creat(obj.prototype)
- 添加父类的属性到新的对象上并初始化. 保存方法的执行结果. apply(..., args)
- 如果执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象。
function _new(obj, ...rest){
// 基于obj的原型创建一个新的对象
const newObj = Object.create(obj.prototype);
// 添加属性到新创建的newObj上, 并获取obj函数执行的结果.
const result = obj.apply(newObj, rest);
// 如果执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象
return typeof result === 'object' ? result : newObj;
}
var str = "string"
var str2 = String("string")
var str3 = new String("string")
第一种和第二种是相同的。第三种严格意义上讲不算是声明字符串,而是使用 String 生成一个 object
String 全局对象是一个用于字符串或一个字符序列的构造函数。
可以看到,String 的本质是一个函数。String(thing) 将 thing 变成一个字符串并返回。
CPU读内存,内存读磁盘
可以不要磁盘只要内存吗?不行,断电会丢失,磁盘可以持久性存储,ctrl+s就是把内存里的东西保存到磁盘中
;(function b() {
b = 123
console.log(b)
})()
正常思路:首先这个立即执行函数拥有独立的词法作用域。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域。执行到b = 123
赋值语句时,会根据词法作用域规则找到b的声明,并且赋值为123,找到b函数的声明,把他覆盖,所以console.log(b)
打印123。但是肯定是错误的
正确思路:
-
函数表达式与函数声明不同,函数名只在该函数内部有效,并且此绑定是常量绑定。
-
对于一个常量进行赋值,在 strict 模式下会报错,非 strict 模式下静默失败。(可以理解为在 strict 模式下会报错,非 strict 模式下静默失败的const)当
b = 123
要把常量b覆盖调时,会静默失败。 -
IIFE中的函数是函数表达式,而不是函数声明。
所以还是打印函数
一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。
线程是不能单独存在的,它是由进程来启动和管理的
线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率
进程中的任意一线程执行出错,都会导致整个进程的崩溃。进程之间的内容相互隔离
线程之间共享进程中的数据
最新的 Chrome 浏览器包括:1 个浏览器(Browser)主进程、1 个 GPU 进程、1 个网络(NetWork)进程、多个渲染进程和多个插件进程。
下面我们来逐个分析下这几个进程的功能。
-
浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
-
渲染进程。核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
-
GPU 进程。其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。
-
网络进程。主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
-
插件进程。主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。