在 JavaScript 中使用“var”的 3 个理由
关键字var
是 JavaScript 中声明变量的第一个方法。它很合适,对吧?Var,变量,它的名字就体现了这一点。但就像小丑一样,var
它不仅仅是一个漂亮的外表——它还有一些负担。作为一名初级程序员,或者一位刚涉足 JavaScript 开发底层的老手,你可能想知道什么时候应该使用它var
来声明 JavaScript 对象和函数。
var
别担心。我有 3 个理由推荐你在下一个 JavaScript 项目中使用它。
你热爱传统,拒绝任何新事物
Var 可能是最古老的声明变量的关键字,但它是迄今为止唯一的一个。它有一些年轻的表亲,let
并随着ES6 的const
出现而一炮走红(截至撰写本文时已超过 6 年!)。但如果你坚持充满风险的旧规范,那就继续使用吧,让这些新贵关键字听听它们糟糕的流行音乐,抱怨它们的父母。var
你喜欢变化,即使你不喜欢
Var 有个麻烦的特点:它创建了一个任意类型的变量,之后又可以将其更改为任意类型的变量。没错,你在第 4 行声明的数字,在第 17 行变成了字符串,在第 109 行又变成了布尔值。这种类型的灵活性是 JavaScript 的一个关键特性,但它是可以避免的。但如果你也喜欢冒险,那就继续使用 Var 吧。
你喜欢泄漏范围
在 ES6 之前,JavaScript 变量始终在函数作用域内定义。在很多情况下,这意味着变量是全局的。JavaScript 不强制使用块级作用域,例如for
循环或if
块内的作用域。因此,使用 声明的变量var
将被提升到其函数作用域的顶部。换句话说,变量声明移动到当前词法环境的顶部,其值为undefined
。提升引起的一个常见问题是,这些变量可以在块作用域之外访问,而开发人员可能并不期望它们被访问到。
这里还可能出现一个更微妙、更难检测的错误,那就是变量阴影。这种情况很少见。如果你也遇到这种情况,那么你var
就是你的英雄。
一定有更好的方法
如果你读到这里,可能马上就要开始猛烈抨击我关于 的说法是错的了var
。事实上,var
除了历史课之外,任何人都不应该在任何 JavaScript 代码中使用 。即使这样,也应该加上一个脚注,比如“请不要这样做”。
Let
并且在过去六年里,所有主流浏览器const
都支持该功能。这在前端时代真的非常非常古老了。这不仅仅是父母对青少年的误解,更是人人都爱的曾祖父母,却没人邀请他们参加有趣的派对。var
Let
保留了 JavaScript 灵活的类型系统,同时启用了块级作用域。Const
创建一个——你猜对了——块级作用域内的常量变量。Const
创建一个无法重新赋值的变量,但与大多数其他语言类似,const
对象的属性可以改变。这两种替代方案var
应该可以满足你的所有用例。即使你正处于需要支持真正过时的浏览器的困境,也不要使用。使用像Babelvar
这样的工具。
所以请不要使用var
。