XMit

Frontend Engineer

提示:本教程会直接跳过配置 github pagsHexo

配置环境

  • 在套件中心安装 “Git Server” 和 ”Node.js v4”
  • 在 home 目录(其它目录也可以)建立一个文件夹,用来保存你的 blog
  • 在终端(或者其它SSH的工具)下连接你的 Synology

安装 Hexo

如果你本地已经初始过已经安装过 Hexo 并具安装过必须的依赖,则只需要把本地的文件丢到/home/blog目录即可

1
2
cd blog //找到你放blog的目录即可
npm install -g hexo-cli //安装Hexo

如果是第一次安装,则需要进行以下操作

1
2
3
4
5
6
7
cd blog
npm install -g hexo-cli //安装Hexo
hexo -v //查看Hexo的安装是否正常
hexo init //初始化Hexo
cd hexo
npm install //安装依赖包
npm install hexo-deployer-git --save //安装插件

启动 Hexo

1
Hexo s // 启动本地服务器

部署到 Github

1
2
3
4
5
hexo clean // 清除本地缓存

hexo generator // 初始化文件

hexo deploy // 提交文件到服务器

nvm 安装

1
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

安装 node

安装指定版本的 node

1
nvm install v5.5.0

安装一个系列中最新的版本

1
nvm install 6
阅读全文 »

除了前两个参数,setTimeout还允许添加更多的参数。它们将被传入推迟执行的函数(回调函数)。

1
2
3
setTimeout(function(a,b){
console.log(a+b);
},1000,1,1);

使用bind方法,把多余的参数绑定在回调函数上面,生成一个新的函数输入setTimeout

1
2
3
4
5
6
function a(b) {
setTimeout(function(arg) {
console.log(arg)
}.bind(null,b),2000)
}
a(1)

使用闭包

1
2
3
4
5
6
function a(arg) {
return function c() {
console.log(arg)
}
}
setTimeout(a(2),1000)

1
2
// 增加插件方法,$(""). 选中元素后直接操作
$.fn.functionName = function () {}
1
2
3
4
//jQuery 应用扩展,在命名空间上加方法,直接 $. 操作
jQuery.extend({
functionName: function () {}
});

父子通信

父组件使用 prop 传递数据给子组件

在父组件 father.vue 中引用子组件 child.vue,把 name 的值传给 child 组件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<template>
<div class="app">
// message 定义在子组件的 props 中
<child :message="name"></child>
</div>
</template>

<script>
import child from './child.vue';
export default {
components: {
child
},
data() {
return {
name: 'linxin'
}
}
}
</script>
阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* @Author xmit
* @DateTime 2017-08-02
* @copyright [copyright]
* @license [license]
* @version [0.1.0]
* @param {[type]} url [jsonp link]
* @param {[type]} params [Object]
* @param {[type]} timeout [number]
* @return {[type]} [Promise]
* @example
*
* jsonp('https://www.ip.net/json/', {units:'si',lang:'zh'}, 5000)
*
*/
function jsonp(url, params, timeout) {
return new Promise(function(resolve, reject) {
let callbackname = '___JSONP_CALLBACK___' + Date.now() + Math.random().toString().substr(2)
let script = document.createElement('script')
script.src = url.indexOf('?') > -1 ? url + "&" + serialize(params) + '&callback=' + callbackname : url + '?' + serialize(params) + '&callback=' + callbackname
// 加载成功
window[callbackname] = function(data) {
clearTimeout(timerid)
removeScript()
resolve(data)
}
// 加载失败
script.onerror = function() {
reject(new Error('Script loading error.'))
clearTimeout(timerid)
removeScript()
}
// 加载超时
let timerid = setTimeout(function() {
reject(new Error('JSONP request timed out.'))
removeScript()
}, timeout)
document.body.append(script)

// 删除script标签
function removeScript() {
delete window[callbackname]
document.body.removeChild(script)
}
// 序列化
function serialize(params) {
let result = ""
for (let key in params) {
result += key + "=" + params[key] + '&'
}
return result.slice(0, result.length - 1)
}
})
}

把每层的值的放到一个数组里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var breadthTraversal = function(root) {
let result = [] //定义保存广度遍历结果的数组
let queue = [root] //将二叉树放入队列
if (root) { //判断二叉树是否为空
while (queue.length) { //判断队列是否为空
let node = queue.shift() //从队列中取出一个结点
result.push(node.value) //将取出结点的值保存到数组
if (node.left) queue.push(node.left) //如果存在左子树,将左子树放入队列
if (node.right) queue.push(node.right) //如果存在右子树,将右子树放入队列
}
}
return result
}
breadthTraversal(tree);
阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var addStrings = function(num1, num2) {
num1 = num1.split("").map(it => +it) // 字符串转成数组
num2 = num2.split("").map(it => +it) // 字符串转成数组
var len1 = num1.length
var len2 = num2.length
var len = 1 + (len1 > len2 ? len1 : len2) // 结果数组的长度
var myArray = new Array(len).fill(0) // 向结果数组填充 0
var i = len1 - 1,
j = len2 - 1,
k = len - 1
while (k > 0) {
num1i = num1[i] === undefined ? 0 : num1[i] // 任何一个数读不到值时,把值变为0
num2j = num2[j] === undefined ? 0 : num2[j] // 任何一个数读不到值时,把值变为0
var element = myArray[k] + num1i + num2j
myArray[k] = element % 10 // 计算结果数组的个位数
myArray[k - 1] = (element - myArray[k]) / 10 // 计算结果数组的十位数
k--
j--
i--
}
if (myArray[0] === 0) { // 如果结果数组没进位就删除
myArray.shift()
}
if (myArray.length === 0) { // 数组的长度为零就返回0
return "0"
}
return myArray.join("") // 把数组转成字符串返回
};

配置编译环境

安装虚拟机

安装Ubuntu 16.04LTS

安装 git

1
2
sudo apt-get update 
sudo apt-get install git

转到/opt目录,并且用命令克隆 Padavan 仓库

1
2
cd /opt
sudo git clone https://bitbucket.org/padavan/rt-n56u.git

安装编译固件所需要的工具

1
sudo apt-get install autoconf automake bison build-essential flex gawk gettext gperf libtool pkg-config zlib1g-dev libgmp3-dev libmpc-dev libmpfr-dev texinfo python-docutils mc

编译一个交叉编译的工具链

1
2
3
cd /opt/rt-n56u/toolchain-mipsel
sudo ./clean_sources
sudo ./build_toolchain

编译3.0内核的固件

如果你需要编译3.0内核的固件就需要执行下面的步骤,默认支持3.4内核

1
2
3
cd /opt/rt-n56u/toolchain-mipsel
sudo ./clean_sources
sudo ./build_toolchain_3.0.x

编译好后的工具链会放在/opt/rt-n56u/toolchain-mipsel/toolchain-3.0.x

以后在更新或者升级工具链的情况下才需要执行以上步骤。

阅读全文 »

JavaScript 的数据类型

  • 引用类型(即 Object 类型)
  • 基本类型(原始类型)
    • Number
    • String
    • Boolean
    • Undefined
    • Null

什么是对象

对象是属性的无序集合,每个属性都是一个名/值对。这个列表中的每一项被称为属性(如果是函数则被称为方法)。
一个简单的对象:

1
2
3
4
var Person = {
name: 'xiaowang',
age: 28
}

上例中的属性名是name、age,相对应的值是xianwang、28

阅读全文 »
0%