zoukankan      html  css  js  c++  java
  • js高级教程阅读笔记 第四章-变量作用域和内存问题

    本章核心

    • 理解基本类型和引用类型
    • 理解执行环境
    • 理解垃圾搜集

    基本类型和引用类型的值

    • 基本类型:简单的数据段
    • 引用类型:多个值构成的对象

    js中引用类型的值是存放在内存中的对象,但是js不允许访问内存控件,所以只能以引用的方式访问

    可以给引用对象添加(删除)新的属性和方法,但是不能用在基本类型上(尽管不会报错,但是返回值是undefined)。

    var `teacher = new object();
    teacher.name = '李';`
    var name = '李';
    name.age = 11; //不会报错,但是返回值undefined

    复制变量值

    在基本类型中,值的复制类似于创建副本

    var a = 1;
    var b = a; //这个时候虽然二者的值都为1,但是二者都是独立的1,开辟的是不同的内存空间

    但是对于引用类型就不同了,这更像是c语言中的指针。以实例来说明

    var a = new object();
    var b = a;
    a.name='zhang';
    alert(b.name);

    结果也是zhang。实际上引用类型创建的是指针,所以a复制给b实际上是把指针备份了一份给b。它们面对的都是同一个对象。

    引用可以是多引用,即一个引用类型可以new多个对象。(前提是其中有对象是在局部中)。

    检测类型

    前面提到检测基本类型的方式是使用typeof,那么对于引用类型来说就需要instanceof,语法如下

    result = var instanceof constructure ; 

    实例:

    alert( person instanceof Object)//检验person是否是object类型

    执行环境和作用域

    在web浏览器中全局执行环境被认为是window对象。(这个和宿主环境有关系)

    局部作用域定义的变量可以和全局变量交换使用。

    在运行的时候,js会形成一条作用链,作用链串起所有方法和变量。

    没有块级作用域:

    if(1){
        var a = 1;
    }
    alert(a);
    //通常在其他c类语言中{}表示了一个作用域,一旦离开即被销毁。但是js中没有这样做,a在{}中被创建就被添加到了执行环境中。

    垃圾搜集

    js采用了垃圾回收机制

  • 相关阅读:
    Using X++ Code Create Meeting Request in Outlook
    程序员的健康
    LinkType Property
    C#一些实用的,容易被遗忘的特性,经验和技巧
    如何面试程序员(转)
    uniapp:授权(以微信小程序为例)
    C#(Windows窗口):窗口最大化、最小化
    Docker 安装和启用Tomcat
    Docker 安装和启用ngnix
    Uniapp: 扫码(以微信小程序为例)
  • 原文地址:https://www.cnblogs.com/comefuture/p/8305960.html
Copyright © 2011-2022 走看看