JS Q&A小记录

原创 2017年05月03日 15:50:38
  • 变量、函数–声明与表达式

      变量声明和函数声明会提升到该函数或外部函数作用域的顶部,函数声明优先级高于变量声明。但是变量的赋值会留在原位。所以函数声明的函数可以被提前引用,但是变量提前引用会被判定为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

版权声明:本文为博主原创文章,未经博主允许不得转载。

基于Node.js的文件服务器(使用Q重构代码)

之前写过一篇文章,简单介绍了一个基于Node.js的静态文件服务器。那时还只是个人兴趣。最近又有了关于服务器的新的需求,我就想花点时间,好好研究一下。所以把之前的代码拿出来重构了一番,整体代码变得干净...

Node.js中,q在链式调用和异步调用中起到的作用

Node.js中,q可以方便地将回调大坑转换成链式调用,极大地增强了代码的可读性,下面一段代码演示了q在链式调用和异步调用中起到的作用。源码//app.js var Q = require('q');...
  • lslxdx
  • lslxdx
  • 2016年03月30日 14:31
  • 547

angular的$q服务以及js的promise编程

JS;promise编程主要是优雅的代码风格,当业务逻辑极其复杂,而且函数之间的回调函数增多可以考虑promise编程::   JS的回调promise编程,上代码: JS p...

【前端】一个仿q+的前端js程序的开发感言及心得

【前言】 前一段时间,大约两个月前,本人仿照q+及网上同类程序开发了一个 类似于webos的程序,现在来谈谈开发过程中的难题及心得。 首先上一幅剧照:...
  • cdnight
  • cdnight
  • 2013年07月26日 10:47
  • 2373

nodejs promise for q.js

摘要: q.js在nodejs里是一个非常流行的promise库,支持浏览器端使用,详情请点击这里 q.js跟async要解决的问题差不多,都是解决回调函数的嵌套问题,避免嵌套层级太深导致一系列...

Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx

Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx   1.1. 预定义函数 魔术方法 魔术函数是什么1 1...
  • attilax
  • attilax
  • 2016年02月17日 00:03
  • 540

在Node.js 中用 Q 实现Promise – Callbacks之外的另一种选择

原文:Promises in Node.js with Q – An Alternative to Callbacks by Marc Harter 《Node.js in Practice》 ...

js,jquery then,angular.js $q 异步编程

我们知道,JavaScript语言的执行环境是单线程的。所谓”单线程”,就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。这种模式的好处是实现起来...

[代码问题记录Q1]c#Listview动态添加数据时阻止重复添加

※问题详情: 写代码过程中,首先解决了主窗体与子窗体之间数据动态联系的问题(非模态化传值加委托事件),但是Listview控件总会添加进一些重复的信息。为此,我想到的办法是:在数据添加之前进行一系列的...

i.MX6Q -- Linux系统下FlexCAN总线的使用记录

开发板平台:珠海鼎芯D338 – 基于i.MX6Q 系统平台:Linux3.0.35 + Busybox1.221、 需要的工具 FlexCAN工具包: libsocke...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JS Q&A小记录
举报原因:
原因补充:

(最多只允许输入30个字)