zoukankan      html  css  js  c++  java
  • 【学习笔记】四:变量、作用域和内存问题

    1.引用类型的值

       引用类型的值是指保存在内存中的对象,JavaScript不允许直接访问内存中的位置,因此在操作对象时,实际上是操作的引用而不是实际的对象。(严密的说法是:当复制保存着对象的某个变量时,操作的是对象的引用。但为对象添加属性时,操作的是实际对象)。

      1)引用类型可以动态添加属性。

      2)引用类型在复制变量值时,复制的是对象的指针,新复制的变量和原来的变量保存的值只想内存中的同一个对象,因此改变其一,另一 个也变。

      3)所有函数的参数都是按值传递的,包括引用类型的传递。引用类型传递的虽然是是对象的内存地址,但是在函数中如果参数的指向重新赋值后改变参数的属性并不会引起所传递值得属性,说明引用类型也是按值传递的。

      4)通过typeof检测基本类型,通过instanceof检测引用类型的值。

    2.执行环境及作用域

      1)执行环境是一个变量或函数可以在其中操作的一个范围环境(就是类C语言中的作用域),每一个执行环境都有一个与之关联的变量对象,环境中的这些变量和函数都保存在这个对象中。

         每个函数都有一个执行环境,函数在执行时会变推入一个环境栈中,函数执行后,栈将其弹出。

         变量对象的父子关系之间组成了一个作用域链。作用域链的最前端是当前活动对象,在寻找变量时首先在当前执行环境中寻找,如果找不到,到期上一级父环境中寻找,直至找到标识符位置(如果找不到通常会导致错误发生)。

      2) 当使用try-catch语句的catch块和with语句时存在作用域链延长的现象,会在作用域链的前端临时增加一个变量对象(不过不常见)。

      3)JavaScript没有块级作用域,只有全局执行环境和函数执行环境之分,不能像类C语言那样中括号就可以确定一个作用域。如:if(true){

                        var color = "blue";

                       }

                      alert(color); //"blue"

        if 语句结束后,变量color依旧存在于if的执行环境中。

        

    3.垃圾收集

      1)常用得了两种回收策略:标记清除和引用计数(引用计数存在循环引用问题,基本上已经不采用了),但在IE9之前的IE浏览器访问非原生JS对象(如DOM元素)时,依旧使用了这种可能存在问题的回收策略。

      2)性能问题:垃圾收集器的调用间隔影响性能。垃圾回收期的调用方式一般由浏览器自己判断。

      3)系统为Web浏览器比较少,为了确保占用最少的内存让页面获得更好的性能,一旦全局变量和全局对象不再使用,最好将其设为null来释放其引用,帮助垃圾收集器回收。

  • 相关阅读:
    Ubuntu 14.04/16.04/18.04安装最新版Eigen3.3.5
    Ubuntu16.04系统安装谷歌浏览器(Google chorm)
    Anaconda3(6)安装opencv
    Ubuntu 16.04 几个国内更新源
    Anaconda3(4-1)ubuntu1604安装pytorch
    Anaconda3(5-3)ubuntu1604安装pycharm
    无人机姿态定位
    Ubuntu16.04--安装Anaconda
    Airsim(1)安装配置win10-vs2015-cuda10-opencv394+扩展版版本+cmake
    cuda加速拼接
  • 原文地址:https://www.cnblogs.com/lauzhishuai/p/9873844.html
Copyright © 2011-2022 走看看