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 实现Promise – Callbacks之外的另一种选择

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

nodejs promise for q.js

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

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

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

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

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

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

i.MX6Q -- Linux系统下FlexCAN总线的使用记录 开发板平台:珠海鼎芯D338 -- 基于i.MX6Q 系统平台:Linux3.0.35 + Busybox1.22

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

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

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

开发板平台:珠海鼎芯D338 – 基于i.MX6Q 系统平台:Linux3.0.35 + Busybox1.221、 需要的工具 FlexCAN工具包: libsocke...

js学习记录

  • 2015-12-16 23:16
  • 6.53MB
  • 下载

Cracking the coding interview--Q8.4

原文: Write a method to compute all permutations of a string 译文: 写一个函数返回一个串的所有排列 比如,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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