Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中声明多个变量_Javascript_Variables_Coding Style_Performance_Declaration - Fatal编程技术网

在JavaScript中声明多个变量

在JavaScript中声明多个变量,javascript,variables,coding-style,performance,declaration,Javascript,Variables,Coding Style,Performance,Declaration,在JavaScript中,可以这样声明多个变量: var variable1 = "Hello, World!"; var variable2 = "Testing..."; var variable3 = 42; var variable1 = "Hello, World!", variable2 = "Testing...", variable3 = 42; …或者像这样: var varia

在JavaScript中,可以这样声明多个变量:

var variable1 = "Hello, World!";
var variable2 = "Testing...";
var variable3 = 42;
var variable1 = "Hello, World!",
    variable2 = "Testing...",
    variable3 = 42;
…或者像这样:

var variable1 = "Hello, World!";
var variable2 = "Testing...";
var variable3 = 42;
var variable1 = "Hello, World!",
    variable2 = "Testing...",
    variable3 = 42;

一种方法比另一种好/快吗?

这只是个人喜好的问题。这两种方法之间没有区别,除了在去掉空白的情况下用第二种形式保存几个字节之外

var variable1 = "Hello, World!";
var variable2 = "Testing...";
var variable3 = 42;
比以下内容更具可读性:

var variable1 = "Hello, World!",
    variable2 = "Testing...",
    variable3 = 42;

但是它们做同样的事情。

第一种方法更容易维护。每个声明都是单行上的一条语句,因此您可以轻松地添加、删除和重新排序声明


对于第二种方法,删除第一个或最后一个声明很烦人,因为它们分别以
var
关键字开始,以分号结束。每次添加新声明时,都必须用逗号替换最后一行中的分号。

这是用于组织的常见方法。所有“作用域”都遵循类似的模式,使代码更具可读性。此外,引擎将它们全部“提升”到顶部。因此,将声明放在一起将更接近实际发生的情况。

除了可维护性之外,第一种方法消除了事故全局变量创建的可能性:

(function () {
var variable1 = "Hello, World!" // Semicolon is missed out accidentally
var variable2 = "Testing..."; // Still a local variable
var variable3 = 42;
}());
第二种方式不那么宽容:

(function () {
var variable1 = "Hello, World!" // Comma is missed out accidentally
    variable2 = "Testing...", // Becomes a global variable
    variable3 = 42; // A global variable as well
}());
也许像这样

var variable1 = "Hello, World!"
, variable2 = 2
, variable3 = "How are you doing?"
, variable4 = 42;

除了更改第一个或最后一个变量外,它很容易维护和读取。

这样做更容易阅读:

var hey = 23;
var hi = 3;
var howdy 4;
var hey=23,hi=3,howdy=4;
但这种方式占用的空间和代码行更少:

var hey = 23;
var hi = 3;
var howdy 4;
var hey=23,hi=3,howdy=4;

它可能是节省空间的理想选择,但让JavaScript压缩器为您处理。

我唯一但必不可少的逗号用法是for循环:

有一段时间,我不确定如何在语言之间切换。

我认为第一种方式(多变量)是最好的,因为你可能会以这种方式结束(从使用的应用程序),在我看来,这很难理解:

    var categories = ko.observableArray(),
        keywordFilter = ko.observableArray(),
        omniFilter = ko.observable('').extend({ throttle: 300 }),
        filteredCategories = ko.computed(function () {
            var underlyingArray = categories();
            return ko.utils.arrayFilter(underlyingArray, function (n) {
                return n.FilteredSportCount() > 0;
            });
        }),
        favoriteSports = ko.computed(function () {
            var sports = ko.observableArray();
            ko.utils.arrayForEach(categories(), function (c) {
                ko.utils.arrayForEach(c.Sports(), function (a) {
                    if (a.IsFavorite()) {
                        sports.push(a);
                    }
                });
            });
            return sports;
        }),
        toggleFavorite = function (sport, userId) {
            var isFavorite = sport.IsFavorite();

            var url = setfavouritesurl;

            var data = {
                userId: userId,
                sportId: sport.Id(),
                isFavourite: !isFavorite
            };

            var callback = function () {
                sport.IsFavorite(!isFavorite);
            };

            jQuery.support.cors = true;
            jQuery.ajax({
                url: url,
                type: "GET",
                data: data,
                success: callback
            });
        },
        hasfavoriteSports = ko.computed(function () {
            var result = false;
            ko.utils.arrayForEach(categories(), function (c) {
                ko.utils.arrayForEach(c.Sports(), function (a) {
                    if (a.IsFavorite()) {
                        result = true;
                    }
                });
            });
            return result;
        });
“超过”的概念可以更普遍地应用,而不仅仅是对象/模块/功能。在这种情况下,它也可以起作用:


OP建议的第二个示例将所有变量耦合到同一个语句中,这使得在不破坏内容(高耦合)的情况下,不可能将其中一行移到其他地方。他给出的第一个例子使变量赋值相互独立(低耦合)

发件人:

低耦合通常是结构良好的计算机系统和良好设计的标志,当与高内聚性结合时,支持高可读性和可维护性的总体目标


因此,选择第一个。

虽然两者都有效,但使用第二个会阻止没有经验的开发人员到处放置var语句并导致提升问题。如果每个函数的顶部只有一个var,那么就更容易调试整个代码。这可能意味着声明变量的行并不像某些人希望的那样显式

我觉得这种权衡是值得的,如果这意味着开发人员不再在他们喜欢的任何地方删除“var”

人们可能会抱怨,我也会抱怨,但很多抱怨并不是为了解决语言问题,而是为了纠正程序员的坏习惯,从而防止他们编写的代码出现问题。因此:

“在具有块作用域的语言中,通常建议在首次使用的位置声明变量。但由于JavaScript没有块作用域,因此更明智的做法是在函数顶部声明函数的所有变量。建议每个函数使用一条var语句。”-


我认为这是个人喜好的问题。我更喜欢以下方式:

   var /* Variables */
            me = this, that = scope,
            temp, tempUri, tempUrl,
            videoId = getQueryString()["id"],
            host = location.protocol + '//' + location.host,
            baseUrl = "localhost",
            str = "Visit W3Schools",
            n = str.search(/w3schools/i),
            x = 5,
            y = 6,
            z = x + y
   /* End Variables */;

避免使用单语句版本(singlevar)的另一个原因是调试。如果在任何赋值行中抛出异常,堆栈跟踪只显示一行

如果使用逗号语法定义了10个变量,则无法直接知道哪一个是罪魁祸首

独立语句版本没有这种模糊性。

介绍了一种非常好的方法:

[a, b] = [1, 2]

a
将等于
1
b
将等于
2

我认为,在我们开始使用ES6之前,使用单一var声明的方法既不好也不坏(如果你有短绒和
“使用严格的”
。这确实是一种口味偏好。但现在情况对我来说发生了变化。以下是我支持多行声明的想法:

<> L> >P>现在我们有了两种新的变量,<>代码> var >代码>过时了,使用<代码> const <代码>到处都是很好的做法,直到你真的需要<代码>让。所以你的代码通常会包含在代码中间赋值的变量声明,并且因为块范围,你经常会移动变量。我认为使用多行声明更方便

  • ES6语法变得更加多样化,我们得到了析构函数、模板字符串、箭头函数和可选赋值。当您大量使用单变量声明的所有这些功能时,会损害可读性


  • 使用ES6:它将把数组中的值或对象中的属性解压缩到不同的变量中

    let[variable1,variable2,variable3]=
    [“你好,世界!”,“测试…”,42];
    console.log(variable1);//你好,世界!
    console.log(variable2);//正在测试。。。
    
    console.log(variable3);/42
    通过一些格式,可以很容易地解决可维护性问题,例如:

    let
      my_var1 = 'foo',
      my_var2 = 'bar',
      my_var3 = 'baz'
    ;
    

    我严格按照个人喜好使用这种格式。当然,对于单个声明,我会跳过这种格式,或者如果它只是让工作变得一团糟的话。

    第二种格式会节省几个字节。Ben Alpert:你怎么看?如果去掉空白,那么