JavaScript声明变量的这四兄弟(var、let、function、const)
作者:Cyan_Con 发布时间:2024-05-09 15:03:05
标签:JavaScript,声明变量,var,let,function,const
四兄弟的背景
在一个名为编程语言
的村庄里,有不同姓氏的村民。例如Java
、Python
、Golang
、JavaScript
等姓氏,而接下来要介绍的就是JavaScript
这个姓氏的一些故事。
我们先介绍这个姓氏里的四个兄弟: var兄
、function兄
、 let兄
、 const兄
。这四个兄弟能做的事情居然都有点相似,不知是否是村长的蓄意安排。不过让人欣慰的是,村长安排的时候考虑的还是很周到的,他们又有各自的特(脾)长(气)。都挺能装的!各自拥有一个带密码锁的背包,可以帮忙担点东西,总体来说都挺能干的,毕竟刚刚说了,挺能装~
四兄弟的特点
我们通过一个表格来看下他们各自的特点:
特征字符 | 英文名 | 中文名 | 特点 |
---|---|---|---|
var | Var Javascript | 鸡娃 | 好显摆,装东西之后,某种情况下还要把密码告诉房东: window,而且上锁之后可以打开更改里面的内容,也不知道这个锁到底能起到什么作用 |
function | Function Javascript | 鸡法 | 装的东西很不一般,一对()一对{},而且只能装这种。这东西就跟魔法一样,可以做好些事情。爆个小料:只要鸡娃在鸡法的领域内显摆,都能安排的明明白白,专治鸡娃的显摆 |
let | Let Javascript | 鸡栏 | 鸡栏比起前面两位,年龄偏小。他不喜欢显摆。而且装了东西就好像一个围栏,只在围栏内生效,好多JavaScript程序猿很喜欢他 |
const | Const Javascript | 鸡坑 | 和鸡栏都出生于2015年,也有围栏的效果,这货装东西,就像往坑里扔石头,扔完就没法再扔其他东西了,再扔就发脾气 |
四兄弟故事
window.writeWhen -> undefined
window.writeWho -> undefined
window.writeWhere -> undefined
window.writeHow -> undefined
window说 '你在我这找啥?我这没有你要的这些,滚一边去'
var writeWhen = '2022-03-20 22:50:30'; -> '2022-03-20 22:50:30'
//【画外音】 鸡娃装了个标识为writeWhen的内容,结果他显摆的毛病又犯了,让房东知道了
function writeHow() {
// 发挥魔法的地方
}
//【画外音】 鸡法的背包装了个魔法
let writeWhen = '2022-03-20' -> SyntaxError: writeWhen has been declared
鸡栏说:'what? 谁已经装过这个writeWhen了?看来我得换一个了'
const writeHow = 'function' -> SyntaxError: writeHow has been declared
鸡坑说:'哎哟!这都有人装过了?栏哥,咱们可别再装其他兄弟或者咱们已经装过的了'
鸡栏说:'好嘞,鸡娃、鸡法,我和鸡坑装过的你们也不要装了'
鸡娃、鸡法说: '了解,我们也不想看见SynctaxError,继续工作'
//【画外音】他们达成了一致,只要被鸡栏和鸡坑装过的,兄弟四个都无法再次装入(declare),且过程不可逆
let writeWho = '简言之' -> '简言之'
//【画外音】 鸡栏这个围栏已经造好了
const writeWhere = 'juejin' -> 'juejin'
//【画外音】 鸡娃装了个标识为writeWhen的内容,结果他显摆的毛病又犯了,让房东知道了
window.writeWhen -> '2022-03-20 22:50:30'
window.writeWho -> undefined
window.writeWhere -> undefined
window.writeHow -> undefined
window说 '嘿嘿,鸡娃爱显摆,他那的情况我知道,其他三兄弟的我就无能为力咯'
function writeHow () {
console.log(curTime, writeWho);
var curTime = '2022-03-22 23:10';
const writeWho = 'name';
console.log(writeWho);
return 'write with story';
}
//【画外音】 我们重新定义了writeHow,并定制了魔法
writeHow(); -> log[undefined, '简言之'] log('name') 'write with story'
//【画外音】 鸡法定义的这个writeHow施展了个魔法,就打印了2行结果并有了返回值,
// 这就是鸡法的独特之处
第一行: 打印curTime和writeWho,鸡娃声明的命名空间会在预检阶段有变量提升过程,
即使此时未赋值,也可以访问到变量,并不会抛出异常。writeWho由于有作用域链的存在
在writeHow所在的区域内找到了writeWho,返回了结果。所以打印了[undefined, '简言之']
第二三行:以不同的方式定义了curTime和writeWho变量并赋值
第四行:打印writeWho,第三行重新定义了writeWho,由于const有“围栏”的特点,所以此时的
writeWho成为了writeHow的私有变量,与外界同名变量再无关联。所以打印了'name'
第五行: 函数返回值为'write with story'
结语
都是定义变量的方式,
function
只能定义函数,而let
、const
和var
可以定义函数和普通变量被
const
定义过的变量无法再次直接赋值
,const
只用来定义常量
,值不会发生变化的量var
在全局下定义的变量会映射到window
下var
和function
可以把已经定义的同一变量反复定义赋值
,但是只要被let
和const
声明过,则无法再次定义
以上内容均为非严格模式
来源:https://www.cnblogs.com/cyancoco/p/16094133.html
0
投稿
猜你喜欢
- 在日常开发中,经常遇到针对字符串的替换、截取,知识点比较碎容易混淆,特此总结一下,仅供参考。一、替换第一个匹配项字符串替换let strte
- 1、shutdown normal 正常方式关闭数据库。 2、shutdown imme
- MySQL 提供了一个很有意思的Engine:Federated!如果你了解Linux下面的Link的话,就应该很好理解这个Federate
- 如何对设计进行评判,一定有很多答案,有利有弊。问100位设计师,会得到100种回答。用线上PV、UV等数据说话,更多受产品属性、运营动作影响
- adonet基础示例分享using System;using System.Collections.Generic;using System
- 从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait。Trait其字面意思是”特性”、”特点”,我们可以理解
- 我们在开发过程中,有时候需要把float,int型等数字作为金额类型数字显示会出现很多问题,比如float会显示成 965868.45999
- try 块允许您测试代码块以查找错误。except 块允许您处理错误。finally 块允许您执行代码,无论 try 和 except 块的
- 两个json数组合并去重,以及删除某一项元素let ha = [ {id:'H',name:'3'}, {i
- 在 IT 开发中,有时我们需要对结构体数组进行排序。Go 语言提供了 sort 包,其中最常用的一种是 sort.Slice() 函数。但是
- 本文实例讲述了Python装饰器decorator用法。分享给大家供大家参考。具体分析如下:1. 闭包(closure)闭包是Python所
- 问题最近在使用 Vue 做东西,用到钉钉扫描登录的功能,这里需要引入远程的 js 文件,因为 Vue 的方式跟之前的不太一样,又不想把文件下
- 问题一:python启动报错api-ms-win-crt-process-l1-1-0.dll 丢失解决:下载api-ms-win-crt-
- 代码如下:<% '隐藏并修改文件的最后修改时间的aspshell '原理:通过FSO可以修改文件的
- 在list列表中,max(list)可以得到list的最大值,list.index(max(list))可以得到最大值对应的索引但在nump
- 如何开始 C#学习过程中有一集讲的是如何查看类图,看完视频后自己就学习如何在VS 2019中查看类图,但是找了好长时间都没有找到查看类图这
- 操作 redisimport redisredisPool = redis.ConnectionPool(host='192.168
- 相信大家在微信上一定被上面的这段话刷过屏,群发消息应该算是微信上流传最广的找到删除好友的方法了。但群发消息不仅仅会把通讯录里面所有的好友骚扰
- mysql中全连接full join...on...用法大部分开发者可能会困惑,为什么我的sql语句怎么写都是错的。很简单因为full jo
- 1、基本概念K近邻法(K-nearest neighbors,KNN)既可以分类,也可以回归。KNN做回归和分类的区别在于最后预测时的决策方