Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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_Function - Fatal编程技术网

Javascript 没有传递值时是否声明函数的参数?

Javascript 没有传递值时是否声明函数的参数?,javascript,function,Javascript,Function,我有一个关于Javascript语言的一般性问题。 当我定义这样的函数时: { var some_func = function(arg1, arg2) { //some code here } } var variable = some_func(a1); 我只向函数传递第一个参数,如下所示: { var some_func = function(arg1, arg2) { //some code here } } var variable = some_

我有一个关于Javascript语言的一般性问题。 当我定义这样的函数时:

{
  var some_func = function(arg1, arg2) {
    //some code here
  }
}
var variable = some_func(a1);
我只向函数传递第一个参数,如下所示:

{
  var some_func = function(arg1, arg2) {
    //some code here
  }
}
var variable = some_func(a1);
第二个参数
arg2
已定义,但值为
undefined
还是完全
undefined


或者解释一下:当定义函数时,函数的参数只是定义为变量或对象属性,还是在幕后有某种动态声明机制?

arg2
将只有
未定义的
,但它是定义的。当我说defined时,我的意思是说你已经定义了参数,但是如果没有传递一个值,它将有
未定义的

证明

让我们这样做函数:

 var some_func = function(arg1, arg2) {
     alert(arg1); alert(arg2);
  }

 some_func('a'); // alerts a and undefined
 some_func('a','b'); // alerts a and b
进一步澄清:

var x; // defined but has undefined value will not throw error Result in undefined
y; // not defined and throws a value. Result in ReferenceError

在这种情况下,
arg2
类似于变量
x
arg2
将只有
未定义的
,但它已定义。当我说defined时,我的意思是说你已经定义了参数,但是如果没有传递一个值,它将有
未定义的

function foo(bar) {
    console.log(bar);
    console.log(baz);
}

> foo()
< undefined
< ReferenceError: Can't find variable: baz
证明

让我们这样做函数:

 var some_func = function(arg1, arg2) {
     alert(arg1); alert(arg2);
  }

 some_func('a'); // alerts a and undefined
 some_func('a','b'); // alerts a and b
进一步澄清:

var x; // defined but has undefined value will not throw error Result in undefined
y; // not defined and throws a value. Result in ReferenceError
在这种情况下,
arg2
类似于变量
x

函数foo(bar){
function foo(bar) {
    console.log(bar);
    console.log(baz);
}

> foo()
< undefined
< ReferenceError: Can't find variable: baz
控制台日志(bar); 控制台日志(baz); } >foo() <未定义
参数始终为“已定义”,但可能具有值
未定义
。未定义的变量实际上是未定义的,并且会导致错误。

函数foo(bar){
控制台日志(bar);
控制台日志(baz);
}
>foo()
<未定义

参数始终为“已定义”,但可能具有值
未定义
。未定义的变量实际上是未定义的,会导致错误。

当您声明一个函数时,您定义的所有参数都称为形式参数。当您调用函数时,您将获得一个参数列表。在运行时

  • 如果参数的数量与形式参数的数量匹配,则每个形式参数都将有与其对应的参数

  • 如果参数的数量大于形式参数的数量,则只能使用特殊变量访问传递的其余参数

  • 如果参数的数量小于形式参数的数量,则将分配它们

  • 那么,来回答你的问题

    第二个参数arg2是否已定义但值为未定义,还是完全未定义

    arg2
    是一个形式参数,在您的案例中,
    undefined
    被传递给它

    参考ECMA标准规范文件第节

    引述,

    a。设func是其[[Call]]内部方法启动代码执行的函数。让名称为func的[[FormalParameters]]内部属性的值

    b。设argCount为args中的元素数

    c。设n为数字0

    d。对于名称中的每个字符串argName,请按列表顺序执行

     i. Let n be the current value of n plus 1.
    
    ii. If n is greater than argCount, let v be undefined
        otherwise let v be the value of the n’th element of args.
    

    声明函数时,定义的所有参数都称为形式参数。当您调用函数时,您将获得一个参数列表。在运行时

  • 如果参数的数量与形式参数的数量匹配,则每个形式参数都将有与其对应的参数

  • 如果参数的数量大于形式参数的数量,则只能使用特殊变量访问传递的其余参数

  • 如果参数的数量小于形式参数的数量,则将分配它们

  • 那么,来回答你的问题

    第二个参数arg2是否已定义但值为未定义,还是完全未定义

    arg2
    是一个形式参数,在您的案例中,
    undefined
    被传递给它

    参考ECMA标准规范文件第节

    引述,

    a。设func是其[[Call]]内部方法启动代码执行的函数。让名称为func的[[FormalParameters]]内部属性的值

    b。设argCount为args中的元素数

    c。设n为数字0

    d。对于名称中的每个字符串argName,请按列表顺序执行

     i. Let n be the current value of n plus 1.
    
    ii. If n is greater than argCount, let v be undefined
        otherwise let v be the value of the n’th element of args.
    

    考虑声明变量和定义变量之间的差异

    • 声明的变量表示变量名存在于当前范围中,按名称引用该变量不会产生引用错误

    • 定义变量是指其值未定义的变量

    函数的形式参数始终是声明的,但它们仅在函数调用为这些参数指定了定义值时才定义

    类似地,没有任何赋值的变量声明,如
    var foo
    将在其包含范围内声明
    foo
    ,但不会为
    foo
    提供定义的值


    有关形式参数和
    参数
    变量的更全面、更具体的概述,请参见。

    考虑声明变量和定义变量之间的差异

    • 声明的变量表示变量名存在于当前范围中,按名称引用该变量不会产生引用错误

    • 定义变量是指其值未定义的变量

    函数的形式参数始终是声明的,但它们仅在函数调用为这些参数指定了定义值时才定义

    类似地,没有任何赋值的变量声明,如
    var foo
    将在其包含范围内声明
    foo
    ,但不会提供
    foo