//创建一个函数,用来获取某个对象的类型是不是你传入的类型
function getFunc(type){return function (obj){return type===Object.prototype.toString.call(obj);};}
var ff =getFunc("[object Array]");
var result =ff([10,20,30]);
console.log(result);//true
var ff1 =getFunc("[object Object]");
var dt =newDate();
var result1 =ff1(dt);
console.log(result1);//false
Array中的sort()方法不仅可以对数值和字符串进行排序,还可以将对象按照某个属性排序
//将电影按照某个属性进行排序
function File(name,size,time){this.name=name;this.size=size;this.time=time;}
var f1 =newFile("jack.avi","400M","1997-12-12");
var f2 =newFile("tom.avi","200M","2017-12-12");
var f3 =newFile("xw.avi","800M","2010-12-12");
var array=[f1,f2,f3];
function fn(attribute){return function (a,b){if(a[attribute]>b[attribute]){return1;}if(a[attribute]<b[attribute]){return-1;}return0;}}
var compare=fn("time");
array.sort(compare);for(var i=0;i<array.length;i++){
console.log(array[i].size+"====>"+array[i].name+"====>"+array[i].time);}
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><script>//函数模式的闭包:在一个函数中有另一个函数
function f1(){
var num=10;
function f2(){
console.log(num);}f2();}f1();//对象模式的闭包:在一个函数中有一个对象
function f3(){
var num1=23;
var obj={
age:num1
};
console.log(obj.age);}f3();//延长作用域链,缓存数据
function f4(){
var num2=34;return function (){
console.log(num2);return num2;}}
var fn=f4();
var fn1=fn();
console.log(fn1);
function f5(){
var num3=45;return{
age:num3
}}
var obj=f5();
console.log(obj.age);</script></body></html>
闭包案例
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><script>/*
* 总结:
* 如果想要缓存数据,就把数据放在外层函数和里层函数的中间位置
* 闭包的作用和缺点:缓存数据。(数据没有及时的释放)
* 局部变量在函数中,函数使用结束后,局部变量就会被自动释放
* 闭包中,里面的局部变量的作用域链将被延长
* *///普通函数
function getRandom(){
var num=parseInt(Math.random()*10+1);
console.log(num);}getRandom();getRandom();//函数模式的闭包
function getRandom1(){
var num1=parseInt(Math.random()*10+1);return function (){
console.log(num1);}}
var fn=getRandom1();fn();fn();fn();</script></body></html>