• 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

  • 相关阅读:
    vue学习目录
    充分利用 SQL Server Reporting Services 图表
    MSCRM 用户登录日志
    Microsoft Dynamics CRM MVP
    在SSRS 里实现 SUMIF
    MSCRM 报表显示 rsprocessingaborted 错误
    电商CRM的痛点在哪里?
    MSCRM 2011/2013/2015 修改显示记录数
    MSCRM 2013/2015 Ribbon Editor
    Q:解决每天第一次打开MSCRM系统展示慢的问题
  • 原文地址:https://www.cnblogs.com/yinsu12311/p/4388420.html
Copyright © 2020-2023  润新知