你的位置:首页 > Java教程

[Java教程]JavaScript 笔记


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

    {

      return getComputedStyle(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