0%

数字千分位形式,是从个位数起,每三位之间加一个逗号,例如:1450068,经过处理之后为1,450,068

方法一:使用Number.prototype.toLocaleString()

toLocaleString() 方法返回这个数字在特定语言环境下的表示字符串。

新的 localesoptions 参数让应用程序可以指定要进行格式转换的语言,并且定制函数的行为。在旧的实现中,会忽略 localesoptions 参数,使用的语言环境和返回的字符串的形式完全取决于实现方式。

使用方式:
阅读全文 »

Vue-Router官网:https://router.vuejs.org/zh/guide/

基础

vue-router是什么

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:

  • 嵌套的路由/视图表
  • 模块化的、基于组件的路由配置
  • 路由参数、查询、通配符
  • 基于 Vue.js 过渡系统的视图过渡效果
  • 细粒度的导航控制
  • 带有自动激活的 CSS class 的链接
  • HTML5 历史模式或 hash 模式,在 IE9 中自动降级
  • 自定义的滚动条行为
阅读全文 »

垃圾回收

执行环境负责代码执行时管理内存。

通过自动内存管理实现内存分配和闲置资源回收。

基本思路:确定哪个变量不会再使用,然后释放它占用的内存。这个过程是周期性的,即垃圾回收程序每隔一定时间(或者说在代码执行过程中某个预定的收集时间)就会自动执行。

以函数中局部变量的正常生命周期为例。函数中的局部变量会在函数执行时存在。此时,栈(或堆)内存会分配空间以保存先相应的值。函数在内部使用了变量,然后退出。此时,就不再需要那个局部变量了,它占用的内存可以释放,供后面使用。

阅读全文 »

小程序

我的小程序常见bug就是code失效的问题,做法是code使用过后重新生成新的code,其实就是刷新sessionKey,所以后端维护session就变得很难,因此就直接传入code就好了。但是新生成的code容易失效(大概3分钟左右),在使用之前就已失效,所以是我的常见bug。

大亲家红娘系列

很简单的一系列小程序

三分钟约会

阅读全文 »

Pug(jade)

模板引擎。类似于JSP、FreeMarker之类Java相关的模板引擎。Pug(原称是jade)是Nodejs相关的模板引擎,可以和Express进行集成。

类似的Nodejs相关的模板引擎:ejsart-templatedoTHandlebarsMustache

模板引擎通常都是有后端搭配进行数据传输,但是有的时候只需要静态页面不需要后端时,类似Java的模板引擎就不好用了。可以在node环境下使用模板引擎可以生成静态页面后发布。

模板引擎的好处在于可以将重复的代码提出来进行模块化,可以进行灵活的嵌入、继承、扩展等,降低后期维护难度和代码修改工作量。

阅读全文 »

形实转换程序。JavaScript中的thunk是指一个用于调用另外一个函数的函数,没有任何参数。换句话说,用一个函数定义封装函数调用,包括需要的任何参数,来定义这个调用的执行,那么这个封装函数就是一个形实转换程序。

同步thunk

function foo(x,y) {
	return x + y;
}

function fooThunk() {
	return foo( 3, 4 );
}

// 稍后

console.log( fooThunk() );	// 7

异步thunk

function foo(x,y,cb) {
    setTimeout( function(){
        cb( x + y );
    }, 1000 );
}

function fooThunk(cb) {
    foo( 3, 4, cb );
}

// 稍后

fooThunk( function(sum){
    console.log( sum );		// 7
} );
阅读全文 »

什么是柯里化

用于创建已经设置好了一个或多个参数的函数。

柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。

函数柯里化的基本方法和函数绑定是一样的:使用一个闭包返回一个函数。两者的区别在于,当函数被调用时,返回的函数还需要设置一些传入的参数。

柯里化函数通常调用另一个函数并为它传入要柯里化的函数和必要参数

阅读全文 »

什么是闭包

闭包是指有权访问另一个函数作用域中的变量的函数。

创建闭包的常见方式:在函数内部创建另一个函数。

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。

简单来说,闭包是保存了执行环境的上下文的函数

阅读全文 »

源码学习总结

  1. 函数柯里化的使用,如patch部分。

  2. 工具类纯函数的封装和解耦,不管多小的功能,如判断值是否有效,!== null || !== undefined 也可以封装成纯函数。

  3. 代码中节点的处理使用了深度优先的思想和递归。

  4. 闭包。善用闭包,将简单的暂存操作也可以提取成闭包进行代码优化。

  5. 策略模式。options的合并策略。

  6. 链表数据结构。类似链表的数据结构建立组件间的父子关系。

  7. 确保函数只执行一次。

    export function once (fn: Function): Function {
      let called = false
      return function () {
        if (!called) {
          called = true
          fn.apply(this, arguments)
        }
      }
    }

patch

patch 的整体流程: createComponent -> 子组件初始化 -> 子组件 render -> 子组件patch

activeInstance 为当前激活的 vm 实例;vm.$vnode 为组件的占位 vnode;vm._vnode 为组件的渲染 vnode。

阅读全文 »