JS Q&A小记录

  • 变量、函数–声明与表达式

      变量声明和函数声明会提升到该函数或外部函数作用域的顶部,函数声明优先级高于变量声明。但是变量的赋值会留在原位。所以函数声明的函数可以被提前引用,但是变量提前引用会被判定为undefined。
      注意ES6标准,用let声明的变量只在所在代码块中有效而且不会被提升。
      而函数定义表达式中,函数的声明虽然也会提前,但是赋值并不能提前,所以该函数无法在表达式定义之前被引用。
       函数与变量同名,且函数声明在先时,如果变量有赋值,则函数声明被覆盖,若没有赋值,则变量声明被忽略。

  • 算术运算符 

      +:字符串优先
       -:数值优先

  • Event Loop

      js的一大特点是单线程,这意味着所有的任务都需要排队执行。任务分为同步和异步两种类型。
       js中的同步不同于其他语言的同步(多线程),是指按照代码顺序执行任务。
       1.同步任务执行时生成一个执行栈。
       2.异步任务是不进入主线程的。只要异步任务有了运行结果,就在”任务队列”之中放置一个事件。
       3.一旦”执行栈”中的所有同步任务执行完毕,系统就会读取”任务队列”,看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
       “任务队列”是一个事件的队列,IO设备和用户产生事件都会在“任务队列”中添加一个事件。只要指定过回调函数,这些事件发生时就会进入”任务队列”,等待主线程读取。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。
      除了放置异步任务的事件,”任务队列”还可以放置定时事件,即指定某些代码在多少时间之后执行。这叫做”定时器”(timer)功能,也就是定时执行的代码。
      定时器功能主要由setTimeout()和setInterval()这两个函数来完成。setTimeout()接受两个参数,第一个是回调函数,第二个是推迟执行的毫秒数。如果将setTimeout()的第二个参数设为0,就表示当前代码执行完(执行栈清空)以后,立即执行(0毫秒间隔)指定的回调函数。
      总之,setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行。它在”任务队列”的尾部添加一个事件,因此要等到同步任务和”任务队列”现有的事件都处理完,才会得到执行。HTML5标准规定了setTimeout()的第二个参数的最小值(最短间隔),不得低于4毫秒,如果低于这个值,就会自动增加。
      以上内容参考阮一峰大大写的博客

    http://www.ruanyifeng.com/blog/2014/10/event-loop.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值