我知道这似乎是一个愚蠢的问题,但我实际上对以下情况感到困惑,如下......
我理解,对于每个变量,我们需要将数据类型指定为 var ,或者虽然这不是一个好的做法,但我们也可以不用 var 。例如
我们可以使用
var name = "kishore";
或简单地
name = "kishore";
但是,当涉及到我们作为函数中的参数传递的变量时,为什么它们不接受var?如果我没有错,我认为这些就像其他变量一样,必须存储一些可以在该函数中访问的值。如果我指定var则会给出错误。我只是想知道那里发生了什么......?
答案 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"]