1、闭包
⑴
function lazy_sum(arr){
var sum=function (){
return arr.reduce(function(x,y){
return x + y;
});
}
return sum;
}
var arr=[1,2,3,4,5];
console.log(lazy_sum(arr)());```
⑵计数器
function create_counter(initial){
var x=initial || 0;
return {
inc:function(){
x += 1;
return x;
}
}
}
var c1=create_counter();
console.log(c1.inc());
console.log(c1.inc());
console.log(c1.inc());
var c2=create_counter(100);
console.log(c2.inc());
console.log(c2.inc());
console.log(c2.inc());```
⑶x的n次方
function make_pow(n){
return function(x){
return Math.pow(x,n);
}
}
var pow2=make_pow(2);
var pow3=make_pow(3);
console.log(pow2(5));//25
console.log(pow3(7));//343```
2、[JSON](http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434499490767fe5a0e31e17e44b69dcd1196f7ec6fc6000)
⑴对象序列化成JSON格式的字符串 - JSON.stringify()
①要输出得好看一些,可以加上参数,按缩进输出:
`JSON.stringify(xiaoming, null, ' ');`
第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array:
②还可以传入一个函数,这样对象的每个键值对都会被函数先处理
③如果我们还想要精确控制如何序列化小明,可以给xiaoming定义一个toJSON()的方法,直接返回JSON应该序列化的数据
⑵拿到一个JSON格式的字符串,我们直接用JSON.parse()把它变成一个JavaScript对象:
JSON.parse()还可以接收一个函数,用来转换解析出的属性
3、插入DOM
对于一个已有的HTML结构:
Scheme
JavaScript
Python
Ruby
Haskell
<ol id="test-list">
<li class="lang">Scheme</li>
<li class="lang">JavaScript</li>
<li class="lang">Python</li>
<li class="lang">Ruby</li>
<li class="lang">Haskell</li>
</ol>```
按字符串顺序重新排序DOM节点:
var list = document.getElementById('test-list');
var arr = Array.from(list.children);
arr.sort((x,y) => {return x.innerText>y.innerText?true:false;});
arr.forEach(function(x){
list.appendChild(x);
});```
4、删除DOM
练习
JavaScript
HTML
CSS
<ul id="test-list">
<li>JavaScript</li>
<li>Swift</li>
<li>HTML</li>
<li>ANSI C</li>
<li>CSS</li>
<li>DirectX</li>
</ul>```
把与Web开发技术不相关的节点删掉:
var list = document.getElementById('test-list');
for(var x = 1; x < list.children.length; x++){
list.removeChild(list.children[x]);
}```