1: 首先谈谈闭包:近来参加过几家公司的实习招聘,有多家都问过 你知道闭包吗? 其中不乏阿里和蘑菇街的一面,在这里简单讲讲关于闭包的那些事儿,写的不太清楚的地方还请大家多多指证,欢迎拍砖更欢迎鲜花~~哈哈
其实 闭包是指有权访问另一个函数作用域中变量的函数
我们先来看两段代码:
1 function f1(){2 var n=10;3 }4 5 alert(n);
大家都知道,这个是会报错的,因为函数外部是无法读取函数内部的局部变量的。
那怎么样做到外面函数也能访问局部变量呢,其实这个是直接做不到的,于是就想到了曲线救国的方法,在函数内嵌套一个函数,然后返回所需要的值,如下所示
1 function f(){ 2 3 n=10; 4 5 function ff(){ 6 alert(n); 7 } 8 9 return ff;10 11 }12 13 var result=f();14 15 result();
此时 result的值就是10,也就是取到了外部函数的局部变量,于是这就是简单的闭包的。
创建闭包的常见方式就是在一个函数内部创建另一个函数
当然闭包会携带包含他的函数的作用域,因此会比其他函数占用更多的内存,过渡使用闭包很有可能会导致内存占用过多,会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
在不是非常必要使用闭包的情况下还是少使用为妙。
2: obj.style 获取的是行间样式 obj.currentStyle 获取非行间样式;
但是currentStyle 只兼容IE(高版本的Chrome也能兼容)
非IE 用getComputedStyle(obj,任意参数) (IE9可兼容)
如何达到兼容呢?
function getStyle(obj,name)
{
if(obj.currentStyle)
{
return obj.currentStyle[name];
}
else
{
returngetComputedStyle(obj,false)[name];
}
}
但是这种取样式,取不出复合样式,比如 getStyle(oDiv,background)取不出来,
要写成getStyle(oDiv,backgroundColor);
3: 数组
var arr=[1,2,3];
arr.length=0; //清空数组的最简易方法
栈方法:LIFO(Last-In-First-Out)
arr.push(4); // 数组的结果是 1,2,3,4 往数组的尾部添加 直接返回的话返回的是 修改后数组的长度 4
arr.pop(); //数组的结果是1,2 在数组的尾部删除 返回的是删除的项 3
队列方法:FIFO(First-In-First-Out)
arr.shift();//数组的结果是 2,3 在数组的头部删除 返回的是删除的项 1
arr.unshift(5); //数组的结果是 5,1,2,3 在数组的头部添加 返回的是数组的长度 4
arr.concat(5); //arr数组的结果还是1,2,3 但是返回的是1,2,3,5 创建一个副本,把接受的参数添加到副本的末尾,返回新构建的数组
arr.slice(1,2); //arr数组的结果还是1,2,3 返回的结果是2 slice(起始位置,结束位置的前一项) 创建一个新的数组,返回起始和结束位置之间的项(不包含结束位置的项)
arr.slice(-2,-1); //结果和上一个结果一样 2 如果为负数则加上数组长度后再计算
arr.splice(1,1); //数组的结果是1,3 但是返回的是删除的那一项 2 arr.splice(起点,长度) 从第一个开始删,删掉1个
arr.splice(1,0,'a','b','c'); //1,a,b,c,2,3 splice(起点,长度,元素..) 从起点开始插入元素
arr.splice(1,1,'a','b') //1,a,b,3
var a=[1,2,3];
var b=[4,5,6];
b.concat(a); //4,5,6,1,2,3 连接字符串
a.join('-'); //1-2-3
var arr=['aa','dd','ee','ss','bb'];
arr.reverse(); //bb,ss,ee,dd,aa 字符串反转
arr.sort(); // aa,bb,dd,ee,ss 排列字符串(sort只认识字符串)
var arr=[1,23,12,85,113,65,92];
arr.sort(function(n1,n2){
return n1-n2;
}); // 1,12,23,65,85,92,113
var arr=[1,2,3,4,5,4,3,2,1];
arr.indexOf(4,4); //返回的结果为 5;indexOF(要查找的项,查找起点位置的索引) 返回的是查找的项在数组中的位置 从第4个项开始找,返回找到4的那个项的索引,若没找到则返回-1(查找是按照===方式查找)
arr.lastIndexOf(4,4); //返回 3 从第四个项开始往前查找为4的那一项的索引 这两个不适用与IE8及以下
今天先写到这里 还会继续更新的 411220405102
新闻热点
疑难解答