美文网首页
变量、作用域、内存

变量、作用域、内存

作者: Viewwei | 来源:发表于2022-05-16 16:20 被阅读0次

原始值和引用值

JavaScript主要是包含两种数据类型,即原始值和引用值。原始值就是简单的数据类型,ES中包含6种,undefined、null、number、string、boolean、symbol。引用值就是由多种类型定义。
原始值和引用值的定时方式类似。都是创建一个变量,然后给它赋值。在变量保存之后,可以做什么就不相同了。引用值可以随意的增删改查属性和方法,但是原始值就不行。在编码的时候虽然能够对原始值变量增删改查,而且不会报错。但是在执行的时候,所有对原始值的操作都是无效的。这是因为原始本身是不可以修改的。在修改的时候,JavaScript引擎会首先创建一个值来保存原始值,然后创建一个相应的包装对象来存储这个值,但是不会对原始值的增删改查属性操作进行装箱操作。所有原始值的动态操作都是无效的。
原始值和引用值在复制的时候也不同。原始值会被复制到新变量的地址位置,引用对象只是改变新属性的地址。
原始值和引用值在传递参数的时候也表现的不同,ES中所有的函数都是按值传递的,,这意味着函数外的值会被复制到函数内部的参数,就像一个变量从另外一个变量复制一样。如果是原始值,那么就跟原始值变量被复制一样,如果是引用值,那么就和引用值一样。在按值传递的时候,值会被复制到一个局部变量(arguments)中

执行上下文与作用域

变量或者函数的上下文决定了它们可以访问哪些数据,以及他们的行为。每个上下文都有一个关联的变量对象全局上下文是最外层的上下文,在浏览器中,全局的上下文就是window对象。每个函数都有自己的上下文。当代码执行流进入函数,函数的上下文被推到一个上下文栈上,在函数执行完成之后,上下文栈会弹出改函数的上下文,将控制权返还给之前的上下文。上下文的代码在执行的时候,会创建变量对象的一个作用域。这个作用域决定了各级上下文中的代码访问变量和函数时的顺序。代码正在执行的上下文的变量始终位于作用域的最前端。

垃圾回收

JavaScript使用的是垃圾回收语言。JavaScript引擎通过内存管理实现内存分配和闲置资源回收。简单来说就是哪些资源不用了就回收哪些资源,然后释放其内存资源。垃圾回收目前使用有两种方式:标记清理和引用计数:JavaScript目前使用的是标记。当变量进入上下文,比如函数内部申明一个变量,这个变量会被加上存在上下文的标记,而在上下文中的变量,在逻辑上来说,永远不应该被释放掉,这是因为其代码正在被运行,当变量离开上下文的时候,也会被加上离开标记。引用计数其思路就是对每个值都记录它被引用的次数。申明变量并赋值,这个变量的引用为1,如果保存的变量被其他值覆盖,则减1.但是引用计数在两种情况有致命的问题,第一就是对象之间的循环引用。导致变量的引用计数始终不为1,从而导致无法释放。第二中就是在JavaScript对象和DOM对象相互引用的时候,如果DOM元素已经删除,但是Dom元素被JavaScript对象引用,从而无法释放掉dom元素

相关文章

  • javascript高级程序设计读书笔记(四)

    变量,作用域,和内存的问题 javascript高级程序设计读书笔记(四) 变量,作用域,和内存的问题 变量 不存...

  • C语言之内存讲解

    1 内存讲解 1.1 作用域 C语言变量的作用域分为:代码块、函数、文件作用域: 1.1.1 局部变量 局部变量(...

  • 《javascript基础补充--作用域与作用域链相关知识点》

    关键词:全局变量、局部变量、变量提升机制、内存回收机制、作用域、作用域链 变量(作用域) 局部变量可以与全局变量重...

  • javascript之作用域

    一、什么是作用域 变量访问的有效范围1、作用域外,无法引用作用域内的变量2、离开作用域后,作用域的变量的内存空间会...

  • 变量、作用域、内存

    一. 基本类型和引用类型的值 基本类型值指的是简单的数据段;引用类型值指那些可能由多个值构成的对象。 基本数据类型...

  • 变量、作用域、内存

    原始值和引用值 JavaScript主要是包含两种数据类型,即原始值和引用值。原始值就是简单的数据类型,ES中包含...

  • 12.Python编程:变量作用域

    变量,是在内存中开辟一块内存来存储数据。每个变量都有自己的作用域和生命周期。熟知不同变量的作用域和生命周期,在开发...

  • C语言基础掌握之day5

    内存管理 作用域 一个C语言变量的作用域可以是代码块作用域,函数作用域或者文件作用域。代码块是{}之间的一段代码。...

  • 【C语言】内存管理-008

    第八章 内存管理 8.1 作用域 C语言变量的作用域分为: 代码块作用域(代码块是{}之间的一段代码) 函数作用域...

  • 第四章 作用域和内存问题

    变量的作用域? 变量作用:起作用域:区域,范围变量起作用的地方 变量的生命周期,变量生于这个作用域,死于这个作用域...

网友评论

      本文标题:变量、作用域、内存

      本文链接:https://www.haomeiwen.com/subject/qrlwurtx.html