深入聊聊先买后付 知乎,深入聊聊湖北红十字会事件

  深入聊聊先买后付 知乎,深入聊聊湖北红十字会事件

  本文为您带来了一些关于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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: