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

时间:2014-12-21 12:57:28

标签: javascript

我知道这似乎是一个愚蠢的问题,但我实际上对以下情况感到困惑,如下...... 我理解,对于每个变量,我们需要将数据类型指定为 var ,或者虽然这不是一个好的做法,但我们也可以不用 var 。例如
我们可以使用

var name = "kishore";

或简单地

name = "kishore";

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

3 个答案:

答案 0 :(得分:5)

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
    };
};

答案 1 :(得分:1)

var关键字用于声明新变量。

参数不同。它们在调用函数时已经存在,函数头中的声明只给出了现有值的名称。

arguments集合包含传递给函数的值,您可以访问那里的参数,即使它们未在函数头中声明为参数。

示例:

function test1(a, b, c) {
  show(a);
  show(b);
  show(c);
}

function test2() {
  show(arguments[0]);
  show(arguments[1]);
  show(arguments[2]);
}

test1(1, 2, 3);
test2(1, 2, 3);


// show in Stackoverflow snipper
function show(n) { document.write(n + '<br>'); }

答案 2 :(得分:1)

参数已存储在arguments数组的函数作用域中,因此您不需要使用var:

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

fun('3');

输出是:

["3"]