深入聊聊先买后付 知乎,深入聊聊湖北红十字会事件
本文为您带来了一些关于javascript的知识,包括为什么需要JavaScript引擎,浏览器内核与js引擎的关系,环境变量和记录等。下面就来看看吧,希望对你有帮助。
【相关推荐:javascript视频教程,web前端】
TypeScript 会取代JavaScript吗?
TypeScript只是带来了思维的类型。
因为JavaScript本身在很长一段时间内对变量、函数参数等类型没有限制。
这可能会给我们的项目带来一些安全隐患,后来的JavaScript社区出现了一系列的类型约束方案。
2014年,脸书引入了flow来检查JavaScript的类型。3.Type源于JavaScript,属于JavaScript。
为什么需要JavaScript引擎
高级编程语言需要转换成最终的机器指令才能执行。
其实我们写的JavaScript,不管是交给浏览器还是节点执行,最终都需要CPU来执行。
所以我们需要JavaScript引擎来帮助我们把JavaScript代码翻译成CPU指令来执行。
浏览器内核和JS引擎的关系
这里我们列出了WebKit,它实际上由两部分组成:
WebCore:负责HTML解析、布局、渲染等。
JavaScriptCore:解析和执行JavaScript代码
变量环境 与 记录
VO(可变对象)可变对象在最新的ECMA标准中,VO已经有了可变环境VE的别称。
GO(Clobal对象)全局对象,全局执行上下文
AO(激活对象)包括函数执行上下文。
内存管理 和 闭包
了解内存管理
JS的内存管理
JavaScript会在定义变量的时候为我们分配内存。
JS基本数据类型的内存分配在执行时会直接在堆栈空间中分配;
复杂数据类型的JS内存分配会在堆内存中开辟一个空间,这个空间的指针会指向返回值变量。
JS的垃圾回收
因为内存的大小是有限的,当不再需要内存的时候,我们需要释放它,让更多的内存空间可用。
垃圾收集在英语中被称为GC。
对于不再使用的对象,我们都称之为垃圾,需要回收释放更多的内存空间。
而我们的语言运行环境,比如java的运行环境JVM,JavaScript的运行环境js引擎都有内存垃圾收集器。
垃圾收集器也简称为GC,所以嘿,在很多地方,你看到GC其实是指垃圾收集器。
深入闭包
计算机科学中闭包的定义(维基百科):
闭包(英文:Closure),又称词法闭包或函数闭包;
它是一种在支持一级函数的编程语言中实现词法绑定的技术。
闭包是实现中的一个结构,存储一个函数和一个关联的环境(相当于一个符号查找表);
闭包和函数最大的区别在于,当一个闭包被捕获时,它的自由变量会在捕获时被确定,这样即使脱离了捕获的上下文,它也能照常运行。
闭包的概念出现在20世纪60年代,最早实现闭包的程序是Scheme,所以我们可以理解为什么JavaScript中会有闭包;
因为JavaScript中大量的设计来自Scheme
让我们再来看看MDN对JavaScript闭包的解释:
一个函数被一个引用绑定到它的周围状态(词法环境)(或者函数被引用包围),这种组合就是闭包。
也就是说,闭包允许你在内部函数中访问外部函数的作用域;
在JavaScript中,每当创建一个函数时,闭包会在函数创建的同时被创建;
函数foo() {
var name=为什么
var年龄=18岁
功能栏(){
console.log(栏,名称)
}
返回bar}var fun=foo()fun()汇总:
一个普通的函数function,如果能访问外层作用的自由变量,那么这个函数就是闭包;
广义来说,JavaScript中的所有函数都是闭包;
狭义上:JavaScript中的函数如果访问外层作用的变量,就是闭包;
this指向
全球范围内:
浏览器:窗口
节点环境:{}
箭头函数 arrow function
箭头函数是ES6之后增加的函数的一种编写方法,比函数表达式更简洁;
箭头不绑定this和arguments属性;
arrow函数不能作为构造函数使用(不能和new一起使用,会抛出错误)
认识arguments
arguments是一个类(伪)数组(类数组)对象,对应于传递给函数的参数。
理解JvaScript纯函数
函数式编程中有一个非常重要的概念叫做纯函数。JavaScript符合函数式编程的规范,所以也有纯函数的概念;
维基百科对纯函数的定义:
在程序设计中,如果一个函数满足以下条件,则称为纯函数
当输入值相同时,该函数需要产生相同的输出。
函数的输出与输入值以外的其他隐藏信息或状态无关,与I/O设备产生的外部输出无关。
函数不能有语义上可观察到的函数副作用,比如“触发事件”,导致输出设备输出,或者改变对象的内容而不是输出值。
总结:
一定的投入一定会产生一定的产出;
在功能执行过程中,不会产生副作用;
副作用:
JavaScript 柯里化
cori化也是函数式编程中一个非常重要的概念。
维基百科解释道:
在计算机科学中,Currying也翻译为Karihua或Gary。
八是接收多个参数的函数,变成接收单个参数(原函数的第一个参数)的函数,返回接受其余参数的新函数并返回结果。
李华声称:如果你固定一些参数,你会得到一个接受其余参数的函数。
总结:
只传递一部分参数给调用它的函数,让它返回一个函数区来处理剩下的参数;
这个过程被称为科里化。
为什么您需要cori化:
在函数式编程中,其实我们往往希望一个函数处理的问题尽可能单一,而不是把一大堆处理过程交给一个函数。
函数foo(x,y,c) {
返回x y c
}
console.log(foo(10,20,30))
//cori化
函数sum(x) {
返回函数(y) {
返回函数(z) {
返回x y z
}
}
}
var a=sum(10)(20)(30)
console.log(a)
//简化cori化
var sum2=x=y=z={
返回x y z
}
console . log(sum 2(10)(20)(30))
组合函数
Compose函数是JavaScript开发中使用函数的技巧和模式:
比如我们现在需要对一些数据调用一个函数,执行两个函数fn1和fn2,依次执行。
然后,如果我们每次都需要调用两个函数,操作就会重复。
那么这两个函数可以组合起来自动依次调用吗?
这个过程就是函数的组合,我们称之为Compose函数。
其他内容
with语句
带语句
作用:可以形成自己的范围。
不建议使用with语句,因为它可能会导致混淆错误和兼容性问题。
var obj2={姓名:汤姆,年龄:18,留言: obj2}
//var message=hello world
函数foo() {
功能栏(){
带有(obj2) {
console.log(消息)
}
}
酒吧()
}
O ():
eval函数
Eval是一个特殊的函数,它可以将传入的字符串作为JavaScript代码运行。
var strFn= var message= Hello world ;console . log(message);;
Eval(strFn)不建议在开发中使用Eval:
eval代码的可读性很差(代码的可读性是高质量代码的重要原则);
Eval是字符串,所以在执行过程中有可能被篡改,可能造成被攻击的风险;
eval的执行必须经过JS解释器,必须经过JS引擎的优化。
严格模式 strict Mode
严格模式是一种限制性的JavaScript模式,它使代码隐式脱离“懒惰模式”
支持严格模式的浏览器在代码中检测到严格模式时,会以更严格的方式监控和执行代码。
该模式通过严格抛出错误来消除一些原始的无声错误。
模式严格允许Js engine在周期性执行代码时进行更多优化(无需处理一些特殊语法)‘use strict’;//打开严格模式var message= hello world console . log(message)严格模式限制
在这里,我们来谈谈几种严格模式中的严格语法限制:
JavaScript的设计是为了让新手开发者更容易使用,所以有时候会出现语法错误,认为可以正常解析。
但在严格模式下,这类错误会被视为错误,以便快速发现并纠正。
无法意外创建全局变量。//1.意外创建了全局变量
message=Hello world
console.log(消息)
函数foo() {
年龄=20岁
}
foo()
console.log(age) strict模式的赋值操作会导致静默失败(注意:无错误无影响)并抛出异常。//默认静态错误
true.name=罗晓;
NaN=123试图在严格模式下删除不可删除的属性。严格模式不允许函数参数同名。//函数foo (x,y,x)不允许函数参数同名{
Console.log (x,y,x)} foo (10,20,30)不允许0 var num=0o123 //octal的八进制语法
Var num2=0x123 //十六进制
严格模式下的Console.log(num,num2),不允许使用var obj2={name: Tom ,age: 18,message: obj2}。
带有(obj2) {
console.log(消息)
}在严格模式下,eval不再是上参考变量var str fn= var message= hello world ;console . log(message);;
评估(strFn)
在console.log(message)的严格模式下,默认情况下不会将此绑定转换为对象。
在严格模式下,自执行函数指向未定义的函数foo() {
console . log(this)//未定义
}
o()【相关推荐:javascript视频教程,web前端】以上是深入谈JavaScript的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。