Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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函数中的参数不';不需要var作为类型?_Javascript - Fatal编程技术网

为什么JavaScript函数中的参数不';不需要var作为类型?

为什么JavaScript函数中的参数不';不需要var作为类型?,javascript,Javascript,我知道这似乎是一个愚蠢的问题,但实际上我对以下场景感到困惑,如下所示… 我明白,对于每个变量,我们都需要将数据类型指定为var,或者尽管这不是一个好的实践,但我们也可以不使用var。例如 我们可以使用 var name = "kishore"; 或者干脆 name = "kishore"; 但是,当涉及到我们在函数中作为参数传递的变量时,为什么它们不接受var呢?如果我没有错的话,我认为这些变量就像其他变量一样,必须存储一些可以在该函数中访问的值。如果我指定var,它将给出错误。我只是想知道

我知道这似乎是一个愚蠢的问题,但实际上我对以下场景感到困惑,如下所示…
我明白,对于每个变量,我们都需要将数据类型指定为var,或者尽管这不是一个好的实践,但我们也可以不使用var。例如
我们可以使用

var name = "kishore";
或者干脆

name = "kishore";

但是,当涉及到我们在函数中作为参数传递的变量时,为什么它们不接受var呢?如果我没有错的话,我认为这些变量就像其他变量一样,必须存储一些可以在该函数中访问的值。如果我指定var,它将给出错误。我只是想知道那里发生了什么..?

var
不是数据类型,而是用于在适当范围内声明变量的关键字/运算符。函数参数的作用域已经限定为它们作为参数的函数,并且没有任何更改。因此,
var
的使用是多余的,不需要

一些注释代码示例:

// A globally accessible function
var f1 = function (p1) { // p1 automatically scoped to f1 and available to all inner functions (like f2 below)
    // A variable available in the scope of f1 and all inner functions (like f2 below)
    var v1;

    // f1, p1, v1, and f2 can be reached from here

    var f2 = function (p2) { // p2 automatically scoped to f2
        // A variable available in the scope of f2
        var v2;

        // f1, p1, v1, f2, p2, and v2 can be reached from here
    };
};

var
关键字用于声明新变量

参数是不同的。调用函数时它们已经存在,函数头中的声明只是为已经存在的值命名

arguments
集合包含传递给函数的值,您可以访问其中的参数,即使这些参数未在函数头中声明为参数

例如:

功能测试1(a、b、c){
表演(a);
表演(b);
表演(c);
}
函数test2(){
显示(参数[0]);
显示(参数[1]);
显示(参数[2]);
}
测试1(1,2,3);
测试2(1,2,3);
//在Stackoverflow snipper中显示

函数show(n){document.write(n+'
');}
参数已存储在参数数组的函数范围中,因此不需要使用var:

function fun(t){
  console.log(arguments)
};

fun('3');
输出为:

["3"]

var
不像静态类型语言中的
int
double
那样是一种数据类型。可能是@Juhana的副本它几乎是一种副本,但变化很大,我认为它是独立存在的。链接的问题和公认的答案在使用
var
的上下文中没有提到参数。因此,如果我将变量定义为var val1=2,var val2=5,并通过传递val1和val2将函数调用为addValues(a,b),那么您的意思是说a的作用域为val1,b的作用域为val2?否。变量的作用域为函数,不是价值观。好吧,现在我明白了。谢谢:)你的意思是说t在我们调用它之前已经在arguments数组中分配了一大块空间?这就是我们应该显式使用var的原因,它有助于创建一个全新的内存块,这个内存块在这个函数中是冗余的吗?每个函数都有一个作用域,它包含与它相关的所有内容,最后一个函数是存储在内存中的对象,每个函数中的参数都存储在数组“arguments”中可以使用此数组或通过传递给函数的名称检索,那么为什么要使用var呢!为什么要创建一个新变量并在内存中使用更多的空间呢?我明白了。非常感谢:)