• 内存、变量、作用域问题


    1.关于引用变量

      基本类型是指简单的数据段,引用类型是指那些可能由多个值组成的对象。

      1.关于复制变量值

      基本类型中,复制变量时,原本和副本相互独立存在,操作不会相互影响

        var n1 = 5;

        var n2 = n1;

      引用类型中,复制变量时,实际上是复制对象的引用(地址),即两个变量同时指向一个地址,此时对一个变量进行操作,另一个变量也会受到影响。

      2.关于参数传递

      实质上与复制变量相似,基本类型参数传递后,函数内部操作对外部变量没影响,但是引用变量的参数传递中,函数局部变量的变化会体现在函数的外部

      3.检测类型

      typeof  是检测变量是字符串、数字、布尔值还是undefined的最佳工具

      instanceof用来检测某个值是否是指定类型的对象

    2.执行环境和作用域

    1.执行环境

      全局执行环境是最外围的一个执行环境,在Web浏览器中,全局执行环境是指window对象,因此所有的全局变量和函数都是作为window对象的属性和方法创建的。

      某个执行环境所有代码执行完时,该环境会被销毁,保存在其中的所有变量和函数定义也随之销毁。(全局执行环境会在关闭网页或浏览器时才会被销毁)

      当执行流进入一个函数时,函数的环境会被推入到一个环境栈中。当函数执行后,栈将环境弹出,将控制权交还给之前的执行环境(摘自《JavaScript高级程序设计》)

    2.内存中的函数对象

      1.创建函数对象时:创建两个新对象

        函数对象:函数定义

        作用域链对象:保存函数对象可用变量的位置对象,默认第一项指向window对象

      2.调用函数时:创建一个对象

        活动对象:专门保存局部变量的对象

          在作用域对象中追加对活动对象的引用

      3.函数调用完成后:

        作用域链中活动对象的引用出栈

        活动对象由于无人引用而释放

  • 相关阅读:
    笔试面试题集锦
    Mosquitto pub/sub服务实现代码浅析-主体框架
    查找算法(一)
    基数排序
    插入排序-----希尔排序
    插入排序------直接插入排序
    归并排序
    选择排序--------简单选择排序
    交换排序------冒泡排序
    排序算法
  • 原文地址:https://www.cnblogs.com/controlms/p/7728260.html
Copyright © 2020-2023  润新知