JavaScript最美妙的地方之一就是它的灵活性。这种语言没有给我们太多需要处理的规则和约定,给了开发人员很大的懈怠。
一个主要的例子:JavaScript允许我们在脚本的任何位置创建任何类型的变量(因为它是一种动态编程语言)。
这是个好消息,但如果我们不谨慎一点,它也可能是一把双刃剑。
更有效地使用JavaScript变量的一种流行方法是singlevar
模式。
我第一次正式遇到这种模式是在斯托扬·斯特凡诺夫的书中,JavaScript模式,从那时起我就一直在用它。
JavaScript世界的领导者Douglas Crockford支持这一单曲var
模式。他的推理如下:
[…]因为JavaScript没有块作用域,所以更明智的做法是在函数的顶部声明函数的所有变量。建议每个函数使用一个var语句。
JSLint: JavaScript代码质量工具
让我们讨论一下JavaScript模式,以及为什么要在开发项目中使用它。
单一Var模式
在单曲中var
模式中,所有局部变量都只使用一个创建var
声明。语句被放在函数块的开头。每个变量由逗号分隔(,
),最后一个变量以分号(;)结束var
声明。
下面是这个模式的一个例子:
函数myfunction() {var a = 1, b = "Hello", c = {name: "Jake",年龄:64},d = new Date(), e;}
细节
上面的例子等于有多个var
每个变量的语句:
函数myfunction() {var a = 1;var b = "Hello";var c ={名字:“约翰”,年龄:64};var d = new Date();var e;}
顺便说一下,倍数var
上面显示的语句模式是单一语句的一个很好的替代方案var
模式,因为变量也是在函数块的开头声明的(这避免了逻辑错误),也是可读的,因此为web开发人员提供了同样的好处,尽管是以一种更冗长的方式。
在JavaScript中,空格、换行符、制表符和其他逗号和分号前后的空格字符会被忽略,所以我们可以在一行中写出上面的例子,如下所示:
函数myfunction() {var a = 1, b = "Hello", c = {name: "John",年龄:64},d = new Date(), e;}
但是为了提高可读性,将每个变量放在自己的行上是一个很好的实践,这样在需要时可以更轻松地单独注释变量。
数据类型重要吗?
JavaScript是一种动态类型语言,因此我们不需要显式地声明变量是/将是什么数据类型。数据类型也可以在没有任何特殊处理的情况下从一种类型更改为另一种类型。
因此,我们可以混合使用多种数据类型——字符串、函数字面量、数组、未定义等var
声明没有任何问题。
做一些工作
我之前提到的书也建议在单身期间做一些“实际的工作”var
声明。例如,假设我们创建了一个函数,返回一个随机选择的整数,在我们提供给它的两个数值参数之间:
//在两个指定整数参数之间返回一个随机整数的函数。var randomizer =函数(a, b) {var min = a, max = b, random = Math.random(),结果;//计算随机数result =数学。Floor(随机* (max - min) + min);返回结果;}//在警告框中显示随机数alert(随机函数发生器(100);
我们可以做的是包括计算结果
变量的值var
声明如下:
//在两个指定整数参数之间返回一个随机整数的函数。var randomizer =函数(a, b) {var min = a, max = b, random = Math.random(),//计算随机数result =数学。Floor(随机* (max - min) + min);返回结果;}//在警告框中显示随机数alert(随机函数发生器(100);
在单身期间做点工作var
语句做两件事:
- 它略微减少了我们必须编写的代码量
- 它避免了冗余。更具体地说,我们不需要声明一个未定义/空变量,我们最终将在我们的函数中使用
一个变种
单曲还有另一种格式var
模式,它将逗号分隔符放在每行的开头,而不是在结尾:
函数myfunction() {var a = 1, b = "Hello", c = {name: "John",年龄:64},d = new Date(), e;}
这种变体的目的是提醒您在语句中添加变量时用逗号分隔变量。
逗号的位置取决于个人的喜好。我吗?
我喜欢在行末用逗号,因为它使var
语句更容易阅读,并且我的代码编辑器的语法高亮显示很快提醒我,我在变量声明之间少了一个逗号。另外,在我看来,一行以逗号开头是不自然的,可读性也较差。各有各的。
使用单一Var模式的好处
为什么要使用这种JavaScript模式?我给你三个理由。但在讨论它们之前,我还想说,声明JavaScript变量没有“唯一正确的方法”,因为该语言没有任何强制的规则或明确的标准来处理这个过程。
其他方式,如多var
我之前简要提到过的模式,甚至只是在第一次使用时声明变量都可以工作。话虽如此,你还是可以从单身中得到一些好处var
模式。
易用性
当所有变量都在一个位置时,创建和管理变量会更容易。你不必去想某个变量在哪里;您所要做的就是向上滚动到函数的顶部,以查看或修改函数的变量。
代码的可读性
单一var
JavaScript模式类似于科学论文的摘要:与第一次使用变量时声明变量相比,它为读者提供了函数将做什么的快速概述,而无需阅读整个内容。然而,只有当变量的命名是直观的,并且函数注释良好时,这才成立。
减少逻辑错误的可能性
因为所有变量都位于函数块的开头,所以我们可以避免与变量提升、命名冲突和意外声明全局变量相关的问题。让我们快速地讨论一下每一个。
起重
在JavaScript中,起重指语言在执行任何其他操作之前先处理所有语句的行为。换句话说,就是JavaScript起重机一直到瞄准镜的顶端。因为我们故意并一致地将所有变量放在函数的开头,这有助于我们避免与提升相关的不可预见的结果。
变量命名冲突
当您在处理长而复杂的脚本时,您可能会在某些时候无意中重用变量名,这可能会导致逻辑错误。通过将所有变量放在一个位置,您可以注意已经使用的变量名。
帮助最小化全局变量
在您的工作中消除任何不必要的全局变量是一个很好的实践,因为您可能会遇到与您可能使用的依赖于全局变量的其他JavaScript库的命名冲突。此外,只要可以,就应该使用局部变量,因为与全局变量相比,它的访问速度更快。单一var
模式可以更方便地创建局部变量,并经常提醒您注意意外的全局变量。
单Var模式的缺点
为了获得一个平衡的观点,我建议阅读以下文章来了解单身的缺点var
模式;他们有强有力的论据,可以帮助你做出明智的决定。
- JavaScript中单一Var模式的批评
- JavaScript中的多个var语句