盒子里有什么?!:变量

小盒子

什么是变量?大多数(尤其是 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/

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

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2671744.html

(0)
上一篇 2025年3月7日 13:15:28
下一篇 2025年2月21日 12:48:03

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 大家好

    大家好,我是Rounak Kumar Singh。我来自印度,是一名技术学士学生。我只是编程初学者,我只知道基本的数据结构和算法,我对学习 Web 开发和机器学习和深度学习感兴趣,我计划尽可能多地记录我的旅程,我将陈述我学到的东西每天在数据…

    2025年3月7日
    000
  • React – 服务器操作

    反应表单动作。 react 引入了新的表单 actions 和相关的钩子来增强原生表单并简化客户端-服务器通信。这些功能使开发人员能够更有效地处理表单提交,从而提高用户体验和代码可维护性。对于react form actions的深入探索,…

    2025年3月7日 编程技术
    200
  • 在 Jest 中验证字符串

    各位提交者们好! 也许您在 jest 中验证字符串时遇到了问题。 例如,上面的测试验证函数接收一个值并返回一个四舍五入的值。 it(‘it should properly format a unit value with rounding.…

    2025年3月7日
    200
  • 掌握 JavaScript 中的 URL API

    作为 web 开发人员,我们经常与 url 打交道。无论我们是解析查询字符串、操作路径还是简单地构建链接,url 都是 web 开发的基本组成部分。值得庆幸的是,javascript 为我们提供了一个强大的 api 来处理 url:url …

    2025年3月7日
    200
  • URL 验证或:我如何学会停止担心并热爱用户

    每个 web 开发人员都会有一段时间必须进行某种类型的输入验证。表单不是博客文章,用户可以在电子邮件字段中诗意地表达他们对雅虎邮箱的喜爱。最终,需要进行字数限制、检查特定字符以及阻止用户发送垃圾 post 请求的简单验证技术。 但是,如果您…

    2025年3月7日
    200
  • 记录 Nodejs 应用程序的最佳实践

    作为一名 node.js 开发人员,在调试、监控和维护应用程序时,日志记录几乎就是一切。但您是否使用日志记录最佳实践?让我们探索一些可以将您的 node.js 应用程序提升到新水平的日志记录技术。 要了解更多信息,您可以查看完整的博客文章。…

    2025年3月7日
    200
  • Nodejs v env 文件、导入模块和权限模型

    node.js v20.6 已发布,其中包含令人惊叹的新功能,这些新功能是 2023 年 10 月 24 日起 lts 版本的一部分。让我们拭目以待! ini 配置文件 告别 dotenv 包,现在 node.js 可以从 .env 文件加…

    2025年3月7日
    200
  • JavaScript 回调中的控制反转:为什么 Promise 是答案

    回调函数是作为参数传递给另一个函数的函数,然后在外部函数内部调用该函数以完成某种例程或操作。可以通过两种方式调用回调:同步和异步。这是 javascript 中最基本的异步模式。 例如: A和B现在发生,在主JS程序的直接控制下。但是 C …

    2025年3月7日 编程技术
    200
  • 与 CSS-in-JS 分手

    JS 中的 CSS “css-in-js”是一个从样式组件开始并在 javascript 中定义样式的流程。 样式组件、Emotion、Mantine 等 优点 适用范围小。您可以通过使用 css 模块来缩小 CSS 范围与组件定义在同一位…

    2025年3月7日 编程技术
    200
  • 如何将shadcn添加到现有项目中

    如果您是一名 web 开发人员,您很可能听说过 shadcn/ui,它是基于 radix ui 的最流行的组件库之一。在这篇文章中,我们将探讨如何将 shadcn 添加到现有项目中。 根据您的项目设置方式以及您使用的框架,将 shadcn …

    2025年3月7日
    200

发表回复

登录后才能评论