JavaScript的变量详解

一、变量的声明和赋值

编程中的程序其本质就是处理数据的过程,当输入指令时,就可以输出相应的内容,在输入和输出之间就是处理数据的过程。处理的数据可能有多种,多个,这时就需要使用不同的名字来存储、区分和提取不同的数据,这个名字就是编程中所叫的变量,简单的来说,可以把变量理解为一个容器,而容器的主要功能就是存储和获取。

1、变量声明

JavaScript是弱类型语言,与之相对应的是强类型语言,所谓强弱之分就是变量保存数据类型的区分,弱类型语言可以保存任意数据类型,而强类型语言必须在声明前指定变量的类型,被规定数据类型的变量只能保存对应的数据格式,常见的强类型语言有:C C++ Java,它们声明变量的同时必须同时声明其类型,在存储数据时必须存储对应的数据类型

float f; // 声明一个浮点类型的变量
int i; // 声明一个整数类型的变量

弱类型的JavaScript在声明变量时无需指定任何数据类型,也就是说每个变量仅仅保存数据值的一个占位符而已,可以被用来存储任意数据类型的值,在未对变量赋值之前变量会被系统默认为undefined(未定义的)

// 语法: var 变量名;
var zhishunet;// 我们也可以使用逗号(,)一次性定义多个变量
var zhishunet, zhishuseo, zhishu// 对于未声明的变量赋值时,变量就成为全局变量了
<script>zhishunet = "www.zhishunet.com"alert(zhishunet);  // 输出 www.zhishunet.com
</script> 

2、变量赋值

// 变量相当于容器,它的主要功能就是存储和读取,在JS中使用等号 “=” 运算符为变量赋值
// 语法: 变量名 = 数据值;zhishunet = "www.zhishunet.com"// 还有就是在声明变量的同时为变量赋值,将声明和赋值步骤合并为一行
// 语法: var 变量名 = 数据值;var zhishunet = "www.zhishunet.com"// 当多次对同一变量赋值时,相当于对该变量德的值进行重写var zhishu = "www.zhishunet.com"
document.write(zhishu);
zhishu = "www.zhishunet.cn"
document.write(zhishu);

二、变量提升

// 变量提升又称为声明提前 举个例子:
var zhishu = "zhishunet"
var zhishu = "zhishuseo"// 上面的例子就是在一个脚本中两次声明变量,但是js中所有全局变量的声明都会提升到脚本执行之前,而赋值操作会保留在原位置,上面代码解析步骤为:
var zhishu;
zhishu = "zhishuent";
zhishu = "zhishuseo";

三、全局变量和局部变量

全局变量和局部变量对应的两个范围分别时全局作用域和局部作用域,一个js文件或者HTML文件就相当于一个全局作用域,在全局作用域下可以包含多个小的区域,这些小区域就可以称作局部作用域,在全局作用域喜爱声明的变量就成为全局变量,在局部作用域下声明的变量就是局部变量,一般我们用函数声明布局作用域。全局作用域能够在任意位置使用,局部作用域仅能够在局部区域使用

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>知数SEO_专注搜索引擎优化和品牌推广</title>
</head>
<body>
<script>var url = "www.zhishunet.com";function demo(){var zhishunet = "www.zhishuseo.cn"document.write('<h2>',url,'</h2>');document.write('<h2>',zhishunet,'</h2>');}demo();document.write('<h2>',url,'</h2>');document.write('<h2>',zhishunet,'</h2>');
</script>
</body>
</html>

函数使用过后局部变量会自动销毁,js提供了一种内存管理机制,也称为垃圾回收机制 

四、变量的命名规则

1、变量其实就是标识符的一种,其命名规则与标识符保持一致,可以简单的理解为:

数字、字母、下划线、美元符,首字不能为数字

2、js区分大小写,可以使用驼峰命名法

大驼峰:GetNameByID

小驼峰:getNameByID (推荐)

五、ES6新特性的局部变量

ES6中有一种新的局部变量的声明方式,关键字为let,这种新方法的出现是为了让var的功能更具有专一性和单一性,让var专一的去声明全局变量

1、let关键字的基本使用

// 语法:let 变量名
let zhishunet;// let 和 var 的语法格式相同,但let关键字实现了功能的专一性和单一性,它为局部变量而生,但是在全局作用域内依然可以使用(坑)function demo(){let url = "www.zhishunet.com";
}

2、区块作用域

// 区块作用域使用方法是用大括号{}为局部作用域定界,let和区块作用域结合可增强代码的可读性和维护性{let url = "www.zhishunet.com";
}alert(url);  // 没输出 因为是局部变量

3、关键字let和var的区别

// 1、、没有变量提升// 2、不能重复声明
// 使用var声明过的变量不能再次使用let声明,使用let声明过的变量也不能再次使用var或let声明

let和var声明方式的区别

关键字varlet
作用域全局或局部作用域局部作用域
是否可以重复声明可以不可以
是否可以重复赋值可以可以
是否有变量提升可以不可以

 

六、ES6新特性的局部变量

常量与变量相对应,常量是一旦定义就不会改变的数据,在项目开发中我们常见的常量名有网站域名,标题以及数学中的圆周率等等,这些就是一旦定义就不希望改变的数据,在ES6之前我们用var 加变量名大写的方式定义常量,ES6新增了const关键字用来声明常量,与var不同 const声明常量时必须进行初始化赋值,否则会报错

// 注意:常量一旦被赋值就不能被重新赋值,一旦定义则无法修改
const SITE = "www.zhishunet.com";
document.write('<h2>',SITE,'</h2>');// const可以在局部作用域中声明,可以成为局部变量,局部变量不能在局部作用域之外使用// 常量没有变量提升效果、不能被重复声明、不能被重新赋值、

常量声明注意事项

关键字const
作用域全局或局部作用域
是否可以重复声明同一作用域下不能
是否可以重复赋值不能
是否有变量提升不能

七、ES6新特性的解构赋值

在ES6以前,变量只能被单独赋值,批量赋值的方式无法实现,在ES6中允许按照一定模式从数组和对象中提取值来对变量进行赋值,成为解构(Destructuring)

// 数组和对象都能在单个变量中存储多个数据值,如
[1,2,3]; // 包含三个元素的数组// ES6 可以这样赋值
var [a,b,c] = [1,2,3];// 之前的写法
var a = 1;
var b = 2;
var c = 3;// 除了var关键字之外,let const关键字同样适用于解构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rime中州韵小狼毫 LaTex输入法配置

本文的分享一种在rime中州韵小狼毫须鼠管输入法中配置LaTex输入方案的方法&#xff0c;并不完美&#xff0c;仅供参考。 先睹为快 LaTex输入方案可以快捷的在公式模式下输入一些基础的数学公式&#xff0c;选词快捷&#xff0c;录入体验优良。 latex.schema.yaml latex.sc…

PMP学习考试经验总结

PMP备考日程计划表 我的PMP的备考大概花了三个月的时间, 可以分为以下几个阶段&#xff1a; Week 1-4: 读完PMBoK 前面7个知识领域&#xff08;中英文版PMBoK一起看&#xff09;。每看完一个知识领域&#xff0c;就看参考书里面的相应章节&#xff08;汪博士那本&#xff09;…

七通道NPN 达林顿管GC2003,专为符合标准 TTL 而制造

GC2003 内部集成了 7 个 NPN 达林顿晶体管&#xff0c;连接的阵列&#xff0c;非常适合逻辑接口电平数字电路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和较高的电流/电压&#xff0c;如电灯电磁阀&#xff0c;继电器&#xff0c;打印机或其他类似的负…

使用python连接elasticsearch

有一个困惑了好久的问题&#xff0c;那就是从python里面连接elasticsearch总是报错。大致长这样 一开始我是看网上把es的安全功能关闭&#xff0c;也就是下面的内容&#xff0c;这个要进入到es的docker中去改config/elasticsearch.yml配置文件&#xff0c;但是这样改了以后kib…

数据结构——栈(Stack)

目录 1.栈的介绍 2.栈工程 2.1 栈的定义 2.1.1 单链表实现栈 2.1.2 数组实现栈 2.1.2.1 静态数组栈 2.1.2.2 动态数组栈 2.2 栈的函数接口 2.2.1 栈的初始化 2.2.2 栈的数据插入&#xff08;入栈&#xff09; 2.2.3 栈的数据删除&#xff08;出栈&#xff09; 2.2.…

每日一题——LeetCode1160.拼写单词

方法一 个人方法&#xff1a; 先统计chars里每个字符出现的次数&#xff0c;再对words里每个字符串统计每个字符出现的字符&#xff0c;当&#xff1a; 1、字符串里出现chars里没有的字符 2、字符串里某个字符出现的次数大于该字符在chars里出现的次数 以上两种情况则不符合…

基于微信小程序的音乐平台 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首音乐4.2 新增音乐4.3 新增音乐订单4.4 查询音乐订单4.5 新增音乐收藏 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的音乐平台&#xff0c;包含了音乐…

【MIT 6.S081】2020, 实验记录(3),Lab: page tables

目录 TaskTask 1: Print a page table Task Task 1: Print a page table 该实验需要增加一个 vmprint 函数&#xff0c;用于打印一个 page table&#xff0c;实现过程可以参考 vm.c 文件中的 freewalk() 函数。 在 defs.h 中增加 vmprint 的定义&#xff1a; void …

宝塔安装redis并且远程连接redis教程

第一步&#xff1a;搜索redis并安装 第二步&#xff1a;在防火墙添加端口6379 第三步&#xff1a;查看宝塔防火墙是否开启了6379端口 firewall-cmd --zonepublic --list-ports 很显然并没有开启 第四步&#xff1a;开启防火墙的6379端口 firewall-cmd --zonepublic --add-po…

【python】搭配Miniconda使用VSCode

现在的spyder总是运行出错&#xff0c;启动不了&#xff0c;尝试使用VSCode。 一、在VSCode中使用Miniconda管理的Python环境&#xff0c;可以按照以下步骤进行&#xff1a; a. 确保Miniconda环境已经安装并且正确配置。 b. 打开VSCode&#xff0c;安装Python扩展。 打开VS…

linux软件安装(yum命令)

1.Linux系统的应用商店 操作系统安装软件有许多种方式&#xff0c;一般分为&#xff1a; 下载安装包自行安装 如win系统使用exe文件、msi文件等如mac系统使用dmg文件、pkg文件等 系统的应用商店内安装 如win系统有Microsoft Store商店如mac系统有AppStore商店 Linux命令行…

qt学习:多界面跳转+信号+槽函数

目录 概念 分类 多界面编程思路 新建界面 注意 头文件 无数据传输跳转界面 有数据传输跳转界面 对象公有接口 界面之间数据传输 信号与槽函数进行数据传输跳转界面 信号: 槽: 概念 格式1 关联信号和发送信号 格式2 通信步骤 自定义信号和槽函数 总结 实…

精彩手绘全解:RAG技术,从入门到精通

本文整理自IVAN ILIN发布于Towards AI的博客[1]。感谢作者的精彩讲解。 深度学习自然语言处理 分享整理&#xff1a;Winnie 引言 检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;简称RAG&#xff09;为大型语言模型&#xff08;LLMs&#xff09;提供了从某…

绘图工具用的好,头发掉的少

程序员不管是在学习&#xff0c;还是工作过程中&#xff0c;很多时候都需要画图&#xff0c;如产品分析、架构设计、方案选型等&#xff0c;良好的绘图不仅可以让绘图者的思路清晰&#xff0c;也可以让聆听者更好的理解。用好画图&#xff0c;升职加薪少不了&#xff01;今天介…

C程序训练:与输入有关的错误

在录入程序时有时稍不注意就可能录入错误的字符导致程序运行结果出现错误&#xff0c;下面举例说明。 下面程序的运行结果是错的&#xff0c;但程序又没有错&#xff0c;到底问题出现在哪呢&#xff1f; #include <stdio.h> int main() {FILE *fp;int i, k, n;fpfopen(…

OceanBase 4.2特性解读:Show Trace全链路跟踪,助力快速问题定位与精准诊断

在分布式数据库环境下&#xff0c;慢 SQL 诊断是运维人员面临的一大挑战。在无法及时发现问题根本原因的情况下&#xff0c;可能会严重影响用户体验&#xff0c;甚至会导致业务服务不可用。相对于单机数据库&#xff0c;分布式数据库系统涉及多个节点、多组件的协同工作&#x…

Go语言认识

Go语言认识 1. Go语言的设计背景2. Go语言的历程3. Go语言对比分析4. Go语言未来的发展规划5. 要不要选择Go 关注 go博客 直接了解第一手资料。 go文档 了解go的全貌。 1. Go语言的设计背景 Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它的设计…

构建基于RHEL7(CentOS7)的OpenSSH9.5p1的RPM包和升级回退方案

本文适用&#xff1a;RHEL7系列&#xff0c;或同类系统(CentOS7等) 文档形成时期&#xff1a;2023年 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目录 环境准备安装依赖openssh-9.5p1-el7.spec内容构建RPM包下载安装前注意事项开启t…

SQL注入攻击

1.用java实现登录的检查 package jdbc1;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner;public class Login {public static void main(String args[]){try(Connection connec…

Redis管道操作

文章目录 1. 问题提出2. 解决方案3. 案例演示4. 总结 1. 问题提出 如何优化频繁命令往返造成的性能瓶颈&#xff1f; Redis是一种基于C/S一级请求响应协议的TCP服务&#xff0c;一个请求会遵循一下步骤&#xff1a; 客户端向服务端发送命令分四步&#xff08;发送命令-> …