当前位置: 首页 > wzjs >正文

佛山建网站哪里好网站域名申请好了怎么建设网站

佛山建网站哪里好,网站域名申请好了怎么建设网站,郑州抖音seo,做宠物的网站有哪些如果你写过几年 JavaScript,你一定对 var 又爱又恨。它简单、直接,但它的一些“怪异行为”也可能是你调试半天的罪魁祸首。 今天,我们就从 JS 进化之旅的第一站开始:彻底告别 var,迎接更强大、更安全的 let 与 const。…

如果你写过几年 JavaScript,你一定对 var 又爱又恨。它简单、直接,但它的一些“怪异行为”也可能是你调试半天的罪魁祸首。

今天,我们就从 JS 进化之旅的第一站开始:彻底告别 var,迎接更强大、更安全的 letconst

一、回忆杀:var 的两大“坑”

在 ES6 出现之前,var 是我们声明变量的唯一方式。它有两个现在看来非常令人困惑的特性。

坑 1:变量提升 (Hoisting)

var 声明的变量,无论写在哪里,都会被“提升”到其所在作用域的顶部。

【过去我们这么写 (ES5)】

console.log(myVar); // 输出:undefined
var myVar = 'Hello, world!';

是不是很奇怪?明明在 console.log 之后才声明 myVar,但程序没有报错,而是输出了 undefined。这是因为 JS 引擎在执行代码前,会先把 var myVar 这部分“提升”到最前面,但赋值操作 myVar = '...' 留在了原地。上面的代码实际等同于:

var myVar; // 变量被提升,并默认赋值 undefined
console.log(myVar);
myVar = 'Hello, world!'; // 赋值操作留在原地

这种行为在代码复杂时,会造成意想不到的 bug。

坑 2:没有块级作用域

var 只认函数作用域和全局作用域,不认 iffor 等语句块产生的作用域。

【过去我们这么写 (ES5)】

for (var i = 0; i < 3; i++) {setTimeout(function() {console.log(i); // 你期望输出 0, 1, 2}, 100);
}
// 实际输出:3, 3, 3

这是经典的面试题。因为 setTimeout 是异步的,当它里面的函数执行时,for 循环早已经结束了。此时,i 的值已经变成了 3。由于 var 没有块级作用域,所有的 setTimeout 回调函数共享着同一个 i,所以它们最后都打印出了 3。

为了解决这个问题,我们过去需要用“立即执行函数表达式 (IIFE)”来创建一个闭包,非常繁琐。

二、进化时刻:letconst 登场

ES6 带来了两个全新的变量声明命令,它们的设计初衷就是为了解决 var 的历史遗留问题。

1. let:真正的块级作用域

let 的行为和你直觉中的变量行为几乎完全一致。

  • 没有变量提升:在声明之前访问 let 变量,会直接报错 ReferenceError。这被称为“暂时性死区 (TDZ)”,它能帮我们更早地发现错误。
  • 拥有块级作用域let 声明的变量只在它所在的 {} 代码块内有效。

【现在我们这么写 (ES6+)】
现在我们再来看上面那个 for 循环的例子,只需要把 var 换成 let

for (let i = 0; i < 3; i++) {setTimeout(function() {console.log(i);}, 100);
}
// 输出:0, 1, 2

奇迹发生了!结果完全符合预期。这是因为每次循环,let 都会创建一个新的、独立的块级作用域,并且把当前的 i 值绑定到这个作用域中。每个 setTimeout 回调都“记住”了自己那一次循环的 i 值。

2. const:声明一个不可变的常量

const 的行为和 let 基本一样(拥有块级作用域,无变量提升),但有一个额外的特点:一旦声明,就必须立即赋值,并且之后不能再被修改

【现在我们这么写 (ES6+)】

const PI = 3.14159;
PI = 3; // Uncaught TypeError: Assignment to constant variable.const USER_CONFIG = { theme: 'dark' };
USER_CONFIG.theme = 'light'; // 这可以!USER_CONFIG = {}; // 这不行!

注意const 保证的是变量指向的内存地址不可变。对于基本类型(数字、字符串),就意味着值不可变。但对于对象、数组等引用类型,你不能让变量指向一个新对象,但可以修改该对象内部的属性。

三、该用哪个?我的建议

  • 默认使用 const:优先使用 const 是一个好习惯。这能防止你在不经意间修改了不该修改的变量,让代码更具可预测性。
  • 当变量需要被重新赋值时,使用 let:比如循环中的计数器,或者值会根据逻辑改变的变量。
  • 彻底忘记 var:在新的项目中,没有任何理由再使用 var

总结

特性varletconst
作用域函数作用域块级作用域块级作用域
变量提升否 (有 TDZ)否 (有 TDZ)
重复声明允许不允许不允许
重新赋值允许允许不允许

今天,我们完成了从 varletconst 的进化。这不仅仅是语法的替换,更是编码思维的升级。从现在开始,让你的代码更严谨、更安全吧!

下一篇,我们将探讨函数的革命性变化——箭头函数。它将如何简化你的代码并解决 this 的大麻烦?敬请期待!


文章转载自:

http://0nZipTvc.nrwkf.cn
http://Mmz6MjuA.nrwkf.cn
http://6mLZXlP8.nrwkf.cn
http://1X74jJ2Q.nrwkf.cn
http://jlkIflJk.nrwkf.cn
http://QyNlfWPw.nrwkf.cn
http://yvxt4yhP.nrwkf.cn
http://sGKnc1EM.nrwkf.cn
http://U1Fcj6Dc.nrwkf.cn
http://2BQan3O6.nrwkf.cn
http://T7Yt2j5w.nrwkf.cn
http://lnsD4o5a.nrwkf.cn
http://wSz2Jd3S.nrwkf.cn
http://NkewNHKo.nrwkf.cn
http://p9sNGfoI.nrwkf.cn
http://r9u7cQHo.nrwkf.cn
http://PRQiBOps.nrwkf.cn
http://FOByMQmY.nrwkf.cn
http://4zK9tT0d.nrwkf.cn
http://wxGIJp58.nrwkf.cn
http://jd3UjZSw.nrwkf.cn
http://irJ1WoZO.nrwkf.cn
http://7ihvaJyX.nrwkf.cn
http://rJaclMG5.nrwkf.cn
http://O5Np8ZHY.nrwkf.cn
http://bLKcb18v.nrwkf.cn
http://KQXPhEKS.nrwkf.cn
http://kS53QrDW.nrwkf.cn
http://dR1mbykX.nrwkf.cn
http://jcMZgYxd.nrwkf.cn
http://www.dtcms.com/wzjs/761222.html

相关文章:

  • 南通网站建设排名公司怎么做家政的网站
  • 怎么做服装外贸网站郴州网
  • 电子商务网站建设教学实施建设外贸网站营销推广
  • 网站建设实验感想相城区网站建设
  • 网络管理系统怎么打开连云港seo优化
  • 网站建设经费预算网页设计与制作课程建设规划
  • 花店网站建设规划书创建网站销售产品
  • 深圳整站优化云南app开发制作
  • 08 iis创建网站公司徽标设计图片
  • 西安app开发公司排名网站建设及优化心得体会
  • 做家政网站求人做网站
  • 杭州画廊网站建设台州网站关键字优化
  • 网站开发项目组成员软件开发属于技术服务吗
  • 市工商局网站建设情况知名建筑类的网站
  • 做网站中心图片软件制作工具
  • 班级网站建设方案企业网站营销的优缺点
  • 中交建设集团网站科技画4k纸科幻画
  • 成都公司网站如何用虚拟主机做网站
  • 教学类网站开发软件外包公司
  • 网站建设与管理ppt模板下载加强网站建设的意义
  • 做电池的外贸网站天空建筑网站
  • wordpress设置视频台州百度搜索优化
  • app ui设计网站全球最大源码共享网站
  • 石家庄做网站汉狮网络上海建设银行官方网站
  • asp网站数据库扫描会员卡管理系统怎么开通
  • 网站seo资讯大连网站制作团队
  • 网站描述案例asp.net网站开发百科
  • 企业网站开发报价形式广东品牌设计公司有哪些
  • 唐山专业网站建设公司wordpress调用指定文章分类链接
  • 导航栏网站建站阅读小说网站建设