之前的笔记没保存没掉了,好气,重新写! 填坑-- 现在与将来 在单个JS文件中,程序由许多块组成,这些块有的现在执行,有的将来执行,最常见的块单位是函数. 程序中'将来'执行的部分并不一定在'现在'运行的部分执行完之后就立即执行,即异步执行将来的部分. //异步请求data数据 _.ajax('data'); //打印data数据 //一般情况下是打印不出来的 console.log(data); 一般的ajax请求都不是同步完成,如果要正确打印出data,最简单的方法是使用一个回调函数. //…
坑坑坑 关于术语:决议.完成以及拒绝. 首先观察Promise(..)构造器: var p = new Promise(function(x, y) { //x() 用于完成 //y() 用于拒绝 }) 该构造器接受一个函数,函数接受连个参数,参数也TM是函数... 第一个通常用于标识Promise已经完成,第二个总是用于标识Promise被拒绝.(这里用词很奇妙啊) 实际上,这只是形参的名字,作用是固定的. 第二个参数所有文献都将其命名为reject,因为拒绝就是它的作用. 第一个参数就比较模…
继续填坑 模式 考虑下面的代码: function fn(x) { //do something return new Promise(function(resolve, reject) { //调用resolve(..)和reject(...) }); } var p = fn(2); new Promise(..)模式通常称为revealing constructor.传入函数会立即执行(不会像then(..)中的回调一样异步延迟),它有两个参数,分别为resolve和reject.这些是p…
这个坑比较深 可能写完我也看不懂(逃 ES6提供了一个新的函数特性,名字叫Generator,一开始看到,第一反应是函数指针?然而并不是,只是一个新的语法. 入门 简单来说,用法如下: function* fn() { console.log(1); //暂停! yield; //调用next方法继续执行 console.log(2); } var iter = fn(); iter.next(); iter.next(); 1.函数生成器特点是函数名前面有一个'*' 2.通过调用函数生成一个控…
好想要对象··· 函数的调用位置不同会造成this绑定对象不同.但是对象到底是什么,为什么要绑定他们呢?(可以可以,我也不太懂) 语法 对象声明有两个形式: 1.字面量 => var obj = { ... }; 2.构造形式 => var obj = new Object(); 两种形式生成的对象是一样的,唯一的区别是,在文字声明中可以添加多个键值对,构造形式只能逐个添加. 类型 JS中有六种主要类型:string.number.booleam.null.undefined.object.…
关于this 与静态词法作用域不用,this的指向动态绑定,在函数执行期间才能确定.感觉有点像C++的多态? var a = 1; var obj = { a: 2, fn: function() { console.log(this.a); } }; obj2 = { a: 3, fn: obj.fn }; //通过对象调用 this指向obj obj.fn(); //通过函数调用 this指向window setTimeout(obj.fn, 0); obj2.fn(); 这个例子很好理解,…
函数作用域 Javascript具有基于函数的作用域,每声明一个函数,都会产生一个对应的作用域. //全局作用域包含f1 function f1(a) { var b = 1; //f1作用域包含a,b,f2 function f2() { //f2有自己的 //...代码 } return a + b; } //无法从外部访问内部作用域 console.log(b); //error IIFE 如果需要封装某些变量,但同时不想多出一个函数名与调用函数,可以使用IIFE,立即执行函数. var…
JS引擎 编译与执行 Javascript引擎会在词法分析和代码生成阶段对运行性能进行优化,包含对冗余元素进行优化(例如对语句在不影响结果的情况下进行重新组合). 对于Javascript来说,大部分情况下编译发生在代码执行前的很短时间内,涉及的概念有引擎.编译器.作用域. 变量声明例如var a = 2这条表达式,编译阶段会先查询作用域是否有同名变量,如果有就忽略声明(仅仅忽略var的声明),继续编译.如果没有,会在当前作用域的变量集合中创建一个变量,命名为a. { //编译阶段找不到a 执行…
继承 mixin混合继承 function mixin(obj1, obj2) { for (var key in obj2) { //重复不复制 if (!(key in obj1)) { obj1[key] = obj2[key]; } } return obj1; } 这种复制是浅复制,对象或者数组函数等都是同一个引用,改变obj1的会同时影响obj2. 寄生继承 ... 隐式继承 子类调用fn.call(this) 深拷贝需要重新声明一个变量(对象),遍历(递归)复制,详情见我的函数技巧…
闭包定义 当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行. 看一段最简单的闭包代码: function foo() { var a = 2; //闭包 function bar() { console.log(a); } return bar; } //理论上 foo执行完内部数据会被销毁 //由于闭包的作用 作用域一直保持 var baz = foo(); baz(); bar()函数可以访问foo()的作用域,通过foo()执行后,返回bar()并当…
变量声明提升 Javascript代码一般情况下是由上往下执行的,但是有些情况下不成立. a = 2; //变量声明被提升在当前作用域顶部 var a; console.log(a); console.log(b); //undefined //同样被提升 var b; 如果同时有函数声明与变量声明呢? console.log(a); //funciton a(){} var a; //函数先提升 变量后提升 因此变量的声明被忽略 function a() {} 两个函数声明呢? fn(); /…
前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地提高代码的重用度,同时还可以获得强类型的支持,提升了应用程序的性能,避免了隐式的装箱.拆箱,以及运行时的类型转换错误. 2.为什么要有泛型? -----以简单的数组排序为例,第一次我们可能会要求对int型数组进行排序,然后我们很快的写出了答案, 第二次,又要求我们对byte[]数组进行排序,这时候我…
call及apply在js里经常碰得到,但一直感觉很陌生,不能熟练使用.怎样才能熟练应用呢? 为什么存在call和apply? 在javascript OOP中,我们经常会这样定义: function cat(){ } cat.prototype={ food:"fish", say: function(){ alert("I love "+this.food); } } var blackCat = new cat; blackCat.say(); 但是如果我们有…
Angular js中的工具方法 angular.isArray angular.isDate angular.isDefined angular.isUndefined angular.isFunction angular.isNumber angular.isObject angular.isString angular.isElement angular.version angular.equals(a,b)      //只要是相同的元素返回true,不同返回假 angular.forE…
一.Promise形象讲解A promise不是angular首创的,作为一种编程模式,它出现在1976年,比js还要古老得多.promise全称是 Futures and promises. 而在javascript世界中,一个广泛流行的库叫做Q 地址是https://github.com/kriskowal/q 而angular中的$q就是从它引入的.promise解决的是异步编程的问题,对于生活在同步编程世界中的程序员来说,它可能比较难于理解,这也构成了angular入门门槛之一,以下将用…
异步模式在web编程中变得越来越重要,对于web主流语言Javscript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 jQuery和Dojo)添加了一种称为promise的抽象(有时也称之为deferred).通过这些库,开发人员能够在实际编程中使用 promise模式.IE官方博客最近发表了一篇文章,详细讲述了如何使用XMLHttpRequest2来实践promise模式.我们来了解一下相关的概念和应用. 考虑这样一个例子,某网页存在异步操作(通过XMLHttpR…
最近正在学习Node,在图书馆借了基本关于Node的书,同时在网上查阅资料,颇有收获,但是整体感觉对Node的理解还是停留在一个很模棱两可的状态.比如Node中的模块,平时练习就接触到那么几个,其他的一些模块暂时只会在学习的时候接触到,不常用便就荒废了.正所谓好记心不如烂笔头,多做笔记还是更有利于理解和记忆.自己做的总结也方便回头复习,所以决定踏上漫长的修炼之旅-- Node提供了许多API,其中一些比较重要.这些核心的API是所有Node应用的支柱,你会不停的用到他们. HTTP服务器 Nod…
本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精华的知识点进行了梳理. 什么是作用域 作用域是一套规则,用于确定在何处以及如何查找变量. 编译原理 JavaScript是一门编译语言.在传统编译语言的流程中,程序中一段源代码在执行之前会经历三个步骤,统称为"编译". 分词/词法分析 将字符串分解成有意义的代码块,代码块又称词法单元.比如…
首先先推荐一篇博文:http://blog.csdn.net/jasonzds/article/details/53717501 这篇博文很清晰的说明了Promise的用法,这里来简单总结一下: Promise主要用来让连续的回调变得清晰.比如: 连续获取豆瓣电影数据: $.get("https://api.douban.com/v2/movie/top250?count=5",function (data) { console.log(data); $.get("https…
核心点promise在生命周期内有三种状态,分别是pending,fulfilled或rejected,状体改变只能是 pending-fulfilled,或者pending-rejected.而且状态一旦改变就不能再次改变. 题1 promise.resolve() .then(() => { console.log('a'); return new Error('error'); }) .then((res)=>{ console.log('b'); console.log('then:'…
在JavaScript中存在这样两种原始类型:Null与Undefined.这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undefined类型只有一个值,即undefined.当声明的变量还未被初始化时,变量的默认值为undefined.Null类型也只有一个值,即null.null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象. js 代码 var oValue; alert(oValue == undefi…
在JavaScript中,标准的id选择器调用语法是: document.getElementById('myid').style.width = pc + "%"; 但是,今天发现,直接用id名字调用竟然也可以正确运行: myid.style.width = pc+"%"; 最后找度娘问了问. 看到Mrcxt的博客里面有这个问题,问题的答案是: 这个最初是 IE 里面的,后来 firefox chrome 好像也支持了. 不建议使用,这个不是标准里面的,将来不一定…
举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个数组[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map实现如下: 由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(pow); // [1, 4,…
Tempdb系统数据库是一个全局资源,可供连接到SQL Server实例的所有用户使用. 存储的内容项: 1.用户对象 用户对象由用户显示创建.这些对象可以位于用户会话的作用域中,也可以位于创建对象所用例程的作用域中.例程可以是存储过程.触发器或用户自定义函数.用户对象可以是一下项内容之一: 用户定义的表和索引 系统表和索引 全局临时表和索引 table变量 表值函数中返回的表 2.内部对象 内部对象是根据需要由SQL Server数据库引擎创建的,用户处理SQL Server语句.内部对象可以…
数据库管理员有时候需要控制文件的大小,可能选择收缩文件,或者把某些数据文件情况以便从数据库里删除. 这时候我们就要使用到DBCC SHRINKFILE命令,此命令的脚本为: DBCC SHRINKFILE ( { file_name | file_id } { [ , EMPTYFILE ] | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ] } ) [ WITH NO_INFOMSGS ] 由于DBCC SHRINKFILE一…
1.表和索引存储结构 在SQL Server2005以前,一个表格是以一个B树或者一个堆(heap)存放的.每个B树或者堆,在sysindexes里面都有一条记录相对应.SQL Server2005以后,引入了分区表的概念(Table Partition),在存储组织上,现有的分区基本上替代了原来表格的概念,原先表的概念成为了一个逻辑概念.一个分区就是一个B树或者一个堆.而一张表格则是一个到多个分区的组合. 1.1用B树存储于聚集索引的表数据页 如果一个表格上有聚集索引(Clustered In…
querySelector():参数与jQuery一样,这个方法获取一组元素中的第一个元素. querySelectorAll():获取一组元素. getElementsByClassName():获取一组class元素. 列表属性classList:返回类数组对象,包含元素所有的class:该对象包含length属性.add()方法.remove()方法和toggle()方法.…
一.简介 1.多线程编程要注意的几点: 安全性:永远不发生糟糕的事情 活跃性:某件正确的事情最终会发生(不会发生无限循环或者死锁) 性能:正确的事尽快发生(上下文切换消耗之类的) 二.线程安全 1.为了防止变量在线程中导致程序出错,可以有以下三种方式: 1)不在线程之间共享该状态变量 2)将状态变量改为不可变的常量 3)在访问状态变量时使用同步 3.当设计线程安全的类时,良好的面向对象技术.不可修改性,以及明晰的不变性规范都能起到一定的帮助作用.(比如:开发人员可以将状态变量保存在公开域中,而不…
push()方法:可以向数组的末尾添加一个或者多个元素,并且返回新的长度   pop()方法:可以删除数组最后一个元素,并且返回被删除的元素,注意:如果数组是空的,该方法不进行任何操作,返回undefined.   unshift()方法:可以向数组的开头添加一个或者多个元素,并且返回新的长度   shift()方法:可以删除数组第一个元素,并且返回被删除的元素,注意:如果数组是空的,该方法不进行任何操作,返回undefined.   splice()方法:从数组中添加/删除项目,然后返回被删除…
JavaScript严格意义上分为ECMAScript.DOM.BOM.ECMAScript是一门真正意义上的语言,独立于浏览器,浏览器只是它的一个宿主环境.DOM(文档对象模型),为ECMAScript操作浏览器网页内容提供接口.BOM(浏览器对象模型),用来控制浏览器(宽度.高度.新窗口打开网页……),提供与浏览器交互的接口.以上三种结合起来,才是真正的JavaScript. ECMAScript的变量类型是松散的,即为弱类型,用var声明一个变量以后就可以保存任何类型的数据.如果你是从Ja…