zoukankan      html  css  js  c++  java
  • 你好javascript day6

    1)对象的引用

    对象的引用方法有两种 点语法  【】方法

    var obj{
    a:1,
    b:2,
    c:3
    };
    console.log(obj.a);//1
    console。log(obj["a"]);//1

     question:对象是什么?储存在哪里?

     栈 堆

    栈的数据读取写入速度快     储存量小

    堆的数据读取写入速度慢     储存量大

    string  number  bool  undefined  储存在栈中

    对象储存在堆中

    栈中的变量一旦不再使用就会清理掉

    堆中的对象的地址就是本身的引用地址 即使不再使用对象的地址也不会被清理  ——》 内存泄漏问题

    obj=null   清理不再使用对象的引用地址   解决 内存泄漏问题

    var  obj1={
    a:1,
    b:2
    };
    var obj2={
    c:3,
    d:4
    };
     obj2=obj1;//把obj1的引用地址复制给obj2
    console。log(obj1==obj2);//true  
     obj2.a=5;//两个对象的引用地址一样所以obj2可以调用到obj1下的a赋值5  a:5
     obj1.b=6;//调用自身下的值点语法即可                             b:6
     obj1.c=7;//由于引用地址一样obj1也可以找到obj2的值         c:7
     obj2.d=8;//调用自身                                   d:8
    console.log(obj1.a,obj1.b,obj2.c,obj2.d);//5 6 7 8
     
    tips:obj1地址复制给obj2时,由于obj2的地址丢失,obj2的值没有重新定义将会为undefined.

    2)函数

    函数也是对象

    function  函数名(参数1,参数2){

    代码块

    };

    函数名(参数1,参数2);//调用函数方法

    函数方法的应用:

    function calculate(v1,v2,type){
    switch(type){
    case"+":
    console.log(v1+v2);
    break;
    case"-":
    console.log(v1-v2);
    break;
    case"*":
    console.log(v1*v2);
    break;
    case"/":
    console.log(v1/v2);
    break;
    }
    }
     calculate(8,9,"*");//72

    函数方法调用严格按照顺序来

    3)函数的定义

    匿名函数

    fn();

    匿名函数没有名字

    可以设置给一个对象,或者一个变量

    命名函数

    函数名();

    命名函数可以在函数定义之前和之后执行,但是匿名函数只能在函数定义后执行
     
    自执行匿名函数
     
    function(){
    代码块
    })();
    自身会执行无法调用执行
     
    构造函数创建
     
    var 变量名=new Function("参数1","参数2","代码块");
    变量名(参数1,参数2);//调用函数方法
    构造函数中,前面的内容就是这个创建函数的所有参数,最后一个内容就是这个函数执行代码块
    要求所有内容都必须是字符串
    缺点,构造函数创建函数缺点是运行速度慢,效率低,因为需要将所有的字符串转换为代码
     
    对象方法定义函数方法
            var obj={
                fn:function(){
                代码块
                };
            };
     
    4)函数的参数
     
    形参  实参
    function  testType(n,m){//该行的n,m为行参
    console.log(n+m);//该行的n,m为实参
    };
    testType(8,8);//16
    testType();//不填入参数也可以执行,相当于给形参定义undefined
    testType(8);//只定义一个参数,第二个参数还是定义了undefined
    testType(1,2,3);//多余的参数不会被传入接收到函数
    //形参有几个实参就要有几个顺序不能改变
    //不想给那个形参传入参数可以定义为undefined

            var obj={a:1};
    
            function fn2(o){
                o.a++;
            }
            fn2(obj);
            console.log(obj);
    
            // 传参传入的是对象,变量是对象,变量的值就是这个对象的引用地址
            // 当传参时将引用地址赋值给o,因此,o和obj的引用地址相同,是同一个对象,
            // 所以修改了o.a值,obj.a也被修改了
  • 相关阅读:
    HDU1013 Digital Roots
    DP---背包问题
    新生代与老年代
    JVM常见问题(二)
    JVM常见问题 一(转载)
    JVM内存模型及分区
    (转载)JVM知识小集
    类加载机制:全盘负责和双亲委托
    mysql 函数GROUP_CONCAT(temp.amount SEPARATOR ',')的用法
    mysql优化--explain关键字
  • 原文地址:https://www.cnblogs.com/zqm0924/p/12892262.html
Copyright © 2011-2022 走看看