盒子里有什么?!:变量

小盒子

什么是变量?大多数(尤其是 mozilla web 文档(mdn))会将其描述为“值的容器”。命名代码,指的是从简单值到函数的任何类型的程序。

var foo = "i pity the...";const group =['rhonda', 'jamey', 'kori', 'greg'];let greed = function (root) {console.log("of all evil");}

盒子里有什么?!:变量

图片来自mdn

通常的做法是描述一个变量“就像可以存储东西的小纸板箱。(mdn)”如果没有这些盒子,我们的价值观就会在代码的热潮中枯萎和消亡,很快就不复存在实施后。正如大部头 eloquent javascript(ejs) 中所述,变量需要“…立即使用,否则(它们)将会消散”,有两种方法可以为持久表达式创建这些容器:

声明:顾名思义。声明一个变量只是确认它的存在和名称,但除此之外就没有什么了。盒子没有打开,所以我们看不到它的内容,或价值。因为盒子是关闭的,但我们希望里面有东西,(薛定谔共鸣,有人吗?)我们给这些盒子赋予了正确命名的值未定义

var question;let box;const cat;

初始化:初始化是用 javascript 的方式表达“这里有一个盒子,这就是里面的东西。”这个盒子是敞开的,我们可以很容易地看到它的内容。“= 运算符”(ejs)用于表示盒子里面的内容。这可能是任何东西,真的。或者什么都没有.. 要说“这个盒子是打开的,但里面肯定没有任何东西”,我们使用术语null。以下是一些初始化示例:

var question = true;let box = null;const cat = 4 + 3;

= 的读取总是将其左边的值赋予右边的值。这就是我们如何知道box
里没有任何东西现在,就像任何打开的盒子一样,它的内容几乎可以在您喜欢的任何时间移动。 “* 可以随时对现有(变量)使用 = 运算符,将它们与当前值断开并让它们指向一个新值:*”(ejs)

let greenlight = false;//*the greenlight box contains the false value*greenlight = true;//*greenlight is now set to the value true*

false 值曾经驻留在此框中,但通过一个简单的更改,里面就有一个全新的值。就这么简单!
好吧,感觉我们已经彻底探索并内化了容器、盒子的概念。现在我们来探讨一下为什么它是错误的。

学习盒子。忘记盒子了。

变量的“容器”哲学对于很多事情来说都非常好,正如您可能已经看到的那样。尽管如此,在某些时候,盒子开始变得复杂:

let a = 5;let b = a;a = 7;console.log(b);// 5

如果盒子 b 里面有盒子 a,并且盒子 b 填充了新值,那么对于 a 来说不也是这样吗?我的意思是,两个盒子放在一起时,里面装满的东西往往是相同的,对吗? 错误。 当你思考这些事情时,变量的盒子概念会变得令人困惑,因为通常情况下,变量的行为根本不像盒子。

盒子里有什么?!:变量

束缚和触手

确实,在这种情况下,最好将数据视为一直存在。从本质上讲,变量只是使该数据变得重要且易于访问。这些程序漂浮在广阔的 techspace 中,由我们的变量来“抓住并保留(它们)”(ejs)。乍一看有点奇怪,但仔细想想就很有意义。 eloquent javascript 是这样描述的:

您应该将绑定想象成触手而不是盒子。它们不包含值;它们抓住它们——两个绑定可以引用相同的值。程序只能访问它仍然具有引用的值。当您需要记住一些东西,你要么长出一根触手来抓住它,要么将你现有的触手之一重新附着在它上面。

现在,attach在这里有点欺骗性,因为这些“触手”只能“抓住”足够小的值来容纳(64位)。这些值称为“简单数据类型”(ejs),包括数字、字符串和布尔值。如果一个值很简单,我们的触手会环绕并抓住它..有点..我们称之为按值传递(gfg)的行为。我说是因为如果我们的触手寻找的值足够简单,它就不会费心去保留同一个值,它只会复制一份并保留它自己:

在上面的例子中,我们的b触手并没有费心去抓住a所拥有的相同的5,所以当a改变了它的条纹并且那个5消失在太空中时,b仍然留下了它最初持有的5的副本。现在让我们尝试一些不同的东西:

var a = [13, 40, 27];var b = a;b.push(5, 1)//push is a method that moves these values into the end an arrayconsole.log(a);//[13, 40, 27, 5, 1];

这个例子有点复杂。 我们的复杂数据类型(数组、对象、函数)太大了,无法复制它们来包裹我们的触手,所以我们所做的只是指向原始数据类型。我们喜欢将这种行为称为通过引用传递(gfg)。在此示例中,b 无法保留自己的数组,因此当它经历更改时,它指向的原始数组会感觉到更改通过了它。

这是对我们如何命名、掌握、指向和以其他方式利用数据来实现我们自己的辉煌目的的简短介绍。这很容易被忽视,但如果没有变量,我们都会迷失在代码的海洋中,我们周围的数字水域,当数字水从我们的手指流过时,我们会抓不住。变数是载我们所有人到达目的地的船,而我,就其中之一来说,很欣赏这一旅程。

最初的参考文献
(mdn)
https://developer.mozilla.org/en-us/docs/learn/javascript/first_steps/variables
(ejs)
https://eloquentjavascript.net/02_program_struct.html
(gfg)
https://www.geeksforgeeks.org/pass-by-value-and-pass-by-reference-in-javascript/

以上就是盒子里有什么?!:变量的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1490207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
React – 服务器操作
上一篇 2025年12月19日 13:01:04
大家好
下一篇 2025年12月19日 13:01:20

相关推荐

  • JavaScript 对象添加属性前为何能看到该属性?

    在 javascript 中,对象添加属性前为何能看到该属性? 当创建一个 javascript 对象时,即使在添加属性之前,也可以通过点语法或方括号语法访问该属性。这是因为: 被输出的实际上是对象本身,而不是对象在输出时的状态。因此,对象后续发生的任何更改都会反映在输出结果中。 以下代码演示了这一…

    2025年12月19日
    100
  • 如何在 JavaScript 函数中修改全局变量并让其他网页访问?

    在 js 函数中修改全局变量 问题描述 如何在一个网页中修改全局变量的值,让另一个网页也能使用修改后的值? 解决方法 在函数中使用全局变量时,实际上是在函数中创建了一个局部变量,而不会修改全局变量。要修改全局变量,可以使用以下方法: 使用 cookie 可以将变量值存储在 cookie 中。在另一个…

    2025年12月19日
    000
  • 如何使用Canvas动态实现图片模糊效果?

    canvas动态实现图片模糊效果 问题:如何在canvas中实现图片的动态模糊效果,类似于曝光照片后的效果? 回答:在canvas中可以利用卷积核来实现模糊效果。以下是实现步骤: 创建canvas和加载图像:首先,创建一个canvas元素并加载要模糊的图像。获取图像数据:使用getimagedata…

    2025年12月19日
    000
  • 如何将数组的一部分元素简洁地插入到另一个数组中?

    更简洁地将数组集合的一部分元素插入到另一个数组集合 如题所述,需要将一个数组集合的前 x 位元素插入到另一个数组集合的第 n 位。现有的解决方案较为繁琐,是否存在更简洁的方案? 以下提供一个更简洁的实现: // 前 n,插入位置 mvar n = 3, m = 2;var a = [“a1”, “a…

    2025年12月19日
    000
  • 多个相同名称的按钮如何分别添加监听事件?

    js 监听事件覆盖问题 问题描述 在一个 html 中有多个带有相同名称的按钮,需要分别为每个按钮添加不同的监听事件。在使用 javascript 绑定事件时,发现点击其中一个按钮会触发所有按钮绑定的事件。 问题分析 在 javascript 中使用 for 循环绑定事件时,变量 [i] 每次执行都…

    2025年12月19日
    000
  • 为什么jQuery赋值后,三级联动下拉选择器中的市级下拉框不会更新?

    js无法触发change事件的问题 在一份三级联动下拉选择器页面中,当手动选择省份时,市级下拉选择器会自动更新。然而,使用jquery直接给省份下拉选择器赋值时,市级下拉选择器却不会更新。 解决方案: 要解决该问题,可以使用以下代码触发change事件: let evt = document.cre…

    2025年12月19日
    000
  • JavaScript 中 var 和 let 有什么区别?

    javascript 中 var 和 let 的区别 在 javascript 中,使用 var 和 let 关键字可以声明和定义变量。然而,这两个关键字之间存在着一些关键的区别: 作用域 var:声明的变量具有全局作用域,这意味着可以在代码的任何位置访问这些变量。let:声明的变量具有局部作用域,…

    2025年12月19日
    000
  • 如何同时运行 cypress run 和 cypress open

    如何同时运行 cypress run 和 cypress open如何同时运行 cypress run 和 cypress open如何同时运行 cypress run 和 cypress open如何同时运行 cypress run 和 cypress open

    cypress 是一个为 web 应用程序构建的强大的端到端测试框架。它旨在使测试变得简单可靠,使开发人员和 qa 工程师能够测试从简单交互到复杂用户工作流程的所有内容。借助 cypress,您可以创建模拟用户操作、验证前端行为并以最少的设置确保 ui 功能的测试。 赛普拉斯有什么用途? cypre…

    2025年12月19日 用户投稿
    000
  • 如何将 JavaScript 中的 console.log() 输出存储到数组或对象中?

    控制台输出收集技巧:存储 console.log() 输出到数组或对象 在 javascript 开发中,利用 console.log() 函数在控制台中打印信息非常方便。但是,如果您想收集这些打印信息以供将来使用,怎么办呢?本文将介绍如何将 console.log() 输出存储到数组或对象中。 方…

    2025年12月19日
    000
  • JavaScript 循环绑定事件时如何避免事件覆盖?

    js 添加监听事件问题 给按钮绑定事件时,可能会遇到这样的问题:同一个按钮,不同的事件被覆盖,导致点击按钮后执行的并不是预期的事件。 在提供的代码中,使用了 for 循环绑定事件,却出现了点击删除按钮调用编辑按钮方法的情况。这是由于在 for 循环中,[i] 最终都等于最后一个数字,导致所有事件都绑…

    2025年12月19日
    000
  • JavaScript 中 var 和 let 关键字声明变量的区别是什么?

    js中var和let关键字声明变量的差异 在JavaScript中,声明变量可以使用var和let关键字。下面介绍其区别: 范围 var声明的变量具有全局作用域,可以在整个脚本中访问。let声明的变量具有块级作用域,仅在声明块内可访问。 重新声明 立即学习“Java免费学习笔记(深入)”; var声…

    2025年12月19日
    100
  • 在浏览器中自动执行 JavaScript

    如果您(像我一样)经常在浏览器中执行相同的操作,您可能会希望(像我一样)将它们自动化。 在这篇简短的文章中,我将向您展示一些最常见的选项,以减少例程并在浏览器中自动执行 JavaScript 脚本(以 Google Chrome 为例)。   立即学习“Java免费学习笔记(深入)”; 在浏览器中自…

    2025年12月19日
    000
  • 选择排序的性能如何?它与其他排序算法相比有什么优缺点?

    选择排序的性能分析 在进行数组排序时,我们可能会使用各种不同的算法,每种算法的效率和稳定性也不尽相同。有一种常见的排序算法叫做选择排序,它采用了双重循环的比较方式来实现。 选择排序算法 以下给出的代码示例展示了选择排序的实现: var arr = [11, 3, 45, 6, 7, 87];for …

    2025年12月19日
    000
  • JavaScript 方法如何实现类似于 Java 中可选参数的功能?

    js 方法中是否支持指定传参? 在 java 中,方法可以接受带有默认值的可选参数,但是,对于 js 来说,没有这种语法。这意味您无法为 js 方法指定特定的传入参数。 不过,您可以使用对象作为方法的参数,从而实现类似的效果。具体做法是将参数封装在一个对象中,然后在方法中解构该对象。 例如,假设您有…

    2025年12月19日
    000
  • 如何用 JavaScript/TypeScript 将数组集合的前几元素插入另一个数组集合的特定位置?

    在 javascript/typescript 中将数组集合前几元素插入另一个数组集合特定位置 现有一个需求:将数组集合 arraryone 中的前 x 位元素,逐个插入另一个数组集合 arrarytwo 中的第 n 位。原有方案过于繁琐,如何简化代码? 优化方案 提供了一个更简洁的方案: 立即学习…

    2025年12月19日
    000
  • JavaScript 中如何高效计算时间差?

    如何高效计算 javascript 中的时间差 在 javascript 中,计算时间差时,精确度尤为重要。下面将提供两种有效且准确的方法来计算时间差。 方法 1:使用自定义计算 const newdate = new date();const olddate = new date(“2021-08…

    2025年12月19日
    000
  • 如何使用DataTables为JSON数据添加序号字段?

    json数据添加序号字段 想要在json数据开头添加一个序号字段,从小到大依次排序,可以按照以下步骤操作: 使用jquery的 ajax 方法从url获取json数据。在 success 回调函数中,使用 jquery.parsejson 解析服务器返回的数据为json对象。使用datatables…

    2025年12月19日
    000
  • 窗体加载时,如何通过radio事件触发选中状态?

    窗体加载时,如何通过radio事件触发选中状态 如何通过在窗体加载时调用的radio事件触发选中状态? 以下代码展示了如何实现这一功能: window.onload = function () { $(`input:radio[name=”Indigenous”]`).click(function …

    2025年12月19日
    000
  • 如何用 JavaScript 判断浏览器是否处于活动窗口状态?

    判断浏览器是否处于活动窗口状态 判断浏览器是否处于当前系统活动窗口状态对于前端开发来说很有用。例如,它可以用于暂停视频播放或启用不同的ui元素。 解决方案 不幸的是,没有直接的方法来用javascript判断浏览器是否处于当前活动窗口。然而,你可以通过综合使用以下方法来大致判断: 立即学习“Java…

    用户投稿 2025年12月19日
    000
  • 为什么将字符串 “2020-10-01” 转换为时间对象后,月份变成 11 月?

    js 字符串转时间问题 遇到这样的问题:将字符串 “2020-10-01” 转换为时间对象后,月份变成 11 月。这是为什么? 答案: 深入查看 new date() 源码可以发现,月份索引从 0 开始,即 0 代表 1 月,11 代表 12 月。因此,当字符串月份 &#82…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信