• 第四章 变量 作用域 内存问题


    js变量

      就是一个标识符 用于特定时间保存特定值,变量的值和数据类型可以在脚本的声明周期内改变(java 定义了一个变量(数据类型+值))

    基本类型 和 引用类型

      基本类型: Number String Boolean Undefined null 值类型  操作保存在变量中的实际值

      引用类型:引用类型的值时保存在内存中的对象 js不允许访问内存的位置 实际操作的是对象的引用 引用类型是按引用访问的

      

    var a = {n:1};
    var b = a;
    a.x = a = {n:2};
    这个问题就是讨论引用类型 优先级问题  等号代表着指针的引用
    解: 
        定义了一个变量a并且指针指向{n:1},然后定义了一个变量b,指针指向同一个内存区,a.x (点操作优先级高) 给a指向的对象 开辟一块内存区,
      名字叫做x,x区域的值是{n:2},这个时候 a和b指向的区域{n:1,x:{n:2}},a又被指向另一个区域{n:2};

      动态的属性

        引用类型的值,可以添加属性和方法 可一个改变和删除其属性和方法

        基本类型添加属性和方法的时候 不报错但是访问的时候属性不见了

      

    var obj = new Object();
    obj.name ="JS";
    obj.age = 22;
    alert(obj.age);  //22
    
    
    var str = "object";
    str.name = "string";
    alert(str.name) // undefined

      复制变量值

        基本类型值复制 在变量对象上创建一个新的值,把这个值复制分配到新的变量上;

    var num1 = 5;
    var num2 = num1;
    num1中保存的值是5,当时用num1来初始化num2的时候,num2的值也是5,但是num1和num2中的5是独立的,num2是 num1的一个值的副本,两个变量可以参与任何操作互补影响

        引用类型复制 将存储在变量对象中的值复制一个份到为新变量分配的空间中,不同的是 复制的是一个变量的指针,两个变量实际上引用同一个对象。

    var obj1 = new Object();
    var obj2 = obj1;
    obj1.name = "jack";
    alert(obj2.name) // "jack";   
    obj2 = obj1 obj1和obj2同时指向一块内存区

      传递参数  

        函数的参数是按值传递的  在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(命名参数 就是arguments对象中的一个元素) 传递引用类型的值时  把这个值在内存中的地址复制给一个局部变量 (这个局部变量的变化会反映到函数外部

    function addTen(num){
        num+=10;
        return num;
    };
    var count = 20;
    var result = add(count);
    alert(count); //20    
    alert(result); //30
    //参数按值传递 基本类型的参数传递 复制一个副本 值相同 毫不相关 同名

    function setName(obj){
      obj.name = "LXK";
    }
    var obj = new Object();
    setName(obj);
    alert(obj.name) //"LXK"
    //参数按值传递 但是引用类型传递的是一个 引用指针 (指针的副本)

    //进一步论证按值传递
    function setName(obj){
      obj.name = "LXK";
      obj = new Object();
      obj.name = "jack";
    };
    var obj = new Object();
    setName(obj);
    alert(obj.name) //"LXK"  
    //如果是按照类型来进行参数传递 那么obj应该指向 new Object(),obj.name 指向"jack";

      类型检测

         typeof 操作符 用于检测 Number String Boolean Undefined 的最佳工具

        instanceof   result = variable instanceof constructor  沿着variable__proto__ === 

  • 相关阅读:
    函数参数太多的一种简化方法
    laravel 获取所有表名
    使用 laravel 的 queue 必须知道的一些事
    git "refusing to merge unrelated histories" 解决方法
    使用 xhprof 进行 php 的性能分析
    php 性能优化
    js原生实现轮播图效果(面向对象编程)
    nextSibling 和nextElementSibling
    如何在页面中使用svg图标
    svg动画 animate
  • 原文地址:https://www.cnblogs.com/liuxiankun/p/6757046.html
Copyright © 2020-2023  润新知