浅聊基础(一)

直接上干粮!!!
  一、.数组排序找最大值 (只要最大值)
    我:arr.sort
    大神:(一行代码呀!)Math.max.apply(null,array)  
    原因:call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的
         每个Function对象实例,也就是每个方法都有call, apply属性.
    注意:是Math.max.apply(null,array) ,而非Math.max.call(null,array) 
        如果是Math.max.call(null,array)   打印出的结果是NaN  ---原因是call第二个参数是一个一个传参,不是以数组的形式传参的
       
二、Html ⇆ Json
  我们需要一层一层剥开HTML,例如:父级---子级--孙级
     例如:div:{props,children:[         //父级
          {div:(props,children:[])},             //子级
          {div:(props,children:[
            {div:(props,children:[])}       //孙级
          ])}
        ]}}
  
  即通过这种方式将UI转换成数据的形式,同时也可以通过这种方法将数据转换成UI!
  感觉虚拟dom是利用的这个原理(在js和html间加一个中间层即虚拟dom,提高浏览器的性能---具体见下章)
三、对MVC,MVVM架构的理解
  MVC中M为module主要是负责数据,V层是负责视图层,C为controller层。
                                

  即当view发生变化会触发controller层做一些业务逻辑操作是module里的数据发生变化从而使view发生变化,有时候view层发生变化可能也会导致module的变化(这种我暂时还没遇见过),感觉还是没有完全实现前后端的分离!
  对于MVVM模式,z直接上图:

        

    由此可以看出这个架构实现了完全的前后端分离,福音呀!!!

四、各浏览器的引擎
    我认为兼容的主要原因就是浏览器内核的不同:即
      
  现在以chorm的V8引擎为好的JavaScript的运行环境,其中node.js也是使用了该引擎。

 五、eventloop
   JS 是门非阻塞单线程语言,如果 JS 是门多线程的语言话,我们在多个线程中处理 DOM 就可能会发生问题(很可能会出现死循环等问题)
   JS 在执行的过程中会产生执行环境,这些执行环境会被顺序的加入到执行栈中。如果遇到异步的代码,会被挂起并加入到 Task(有多种 task) 队列中。一旦执行栈为空,Event Loop 就会从 Task 队列中拿出需要执行的代码并放入执行栈中执行,所以本质上来说 JS 中的异步还是同步行为。不同的任务源会被分配到不同的 Task 队列中,任务源可以分为 微任务(microtask) 和 宏任务(macrotask)。浏览器会先执行一个宏任务,接下来有异步代码的话就先执行微任务。 
  正确的一次 Event loop 顺序是这样的
执行同步代码,这属于宏任务
执行栈为空,查询是否有微任务需要执行
执行所有微任务
必要的话渲染 UI
然后开始下一轮 Event loop,执行宏任务中的异步代码
  V8的js引擎中serttImeout系列中,虽然 setTimeout 延时为 0,其实还是有延迟。其中requestFream虽然没有延迟但是性能可能没有这么好!有利也有弊!!!  


六、JSONP服务端的脚本
  JSONP 的原理很简单,就是利用 <script> 标签没有跨域限制的漏洞。通过 <script> 标签指向一个需要访问的地址并提供一个回调函数来接收数据当需要通讯时。
  JSONP 使用简单且兼容性不错,但是只限于 get 请求。 

七、TCP
    HTTP 是无连接的,所以作为下层的 TCP 协议也是无连接的,虽然看似 TCP 将两端连接了起来,但是其实只是两端共同维护了一个状态
    建立TCP三次握手:在 TCP 协议中,主动发起请求的一端为客户端,被动连接的一端称为服务端。不管是客户端还是服务端,TCP 连接建立完后都能发送和接收数据,所以 TCP 也是一个全双工的协议
 他的过程就像打电话的过程,一开始两者都没有打电话,在第一次握手相当于A给B打电话,发送了一个信号;第二次握手相当于B接受到这个信号又给B发送了一个信号说“听到了”;紧接着第三次握手就是A知道了B接收到了信号又给B发送一些内容

    TCP的四次挥手:第一次挥手是A即客户端告诉B服务端A这边东西传完了;第二次挥手是B知道A传完了,但是B还没传完;第三挥手是B像A说一下,这边可能还会有东西;第四挥手是A接收到了B的消息,给B说知道了,等到B接收到消息回复后A断掉了连接。

 

八、浏览器的开源

         开源指的是这个软件的源代码是公开的.开源浏览器即指源代码公开的浏览器软件.IE 是微软公司的商业浏览器软件,其源代码是保密的.Chrome就是开源的, firefox好像也是.开源的好处是, 更多人使用, 也比较容易发现问题, 然后修改.

这是一些浅浅的理解,以后多加积累,希望对=每一点有更深的理解!!!错误之处,请大神指出!!!抱拳



转载于:https://www.cnblogs.com/xxny/p/10598475.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值