JS如何处理函数参数

How JS treat function parameters?

本文关键字:参数 处理函数 JS      更新时间:2023-09-26

我知道在js中函数是对象,据我所知,对象具有属性和方法。但是我不知道JS引擎如何处理函数参数?(因为它们不像属性一样可访问)。
在下面的代码中:

function func(parameter1) {
  console.log(parameter1);
};
func();

我不明白为什么结果应该是"未定义的"。js 引擎是否将参数视为变量?如果是这样,他们的可变环境是什么?
另一件让我感到困惑的事情:下面的匿名函数在哪里创建?它在哪里?以及稍后可以在代码中访问它吗?

function a(par1) {
  par1();
}
a(function() {console.log("Hello");)

对不起英语,谢谢你的帮助。

参数是在处理的编译阶段在函数的作用域上声明的变量。

您得到的未定义结果意味着变量存在,但还没有值。未定义是其默认值。

阅读此处以了解更多信息https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20&%20closures/ch2.md

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/undefined

编辑:忘记了你的第二个问题。

匿名函数是在全局范围内创建的(如果它们不在另一个作用域内),您无法再次调用它们

请参阅 10.5 声明绑定实例化:

每个执行上下文都有一个关联的变量环境。 在 ECMAScript 代码中声明的变量和函数在 执行上下文作为绑定添加在其中 变量环境的环境记录。对于函数代码, 参数也会作为绑定添加到该环境记录。

如果未指定参数,则相应参数的值将变为未定义:

  1. func 成为其 [[Call]] 内部方法启动代码执行的函数。让名称成为函数的值 [[形式参数]] 内部属性。
  2. argCountargs 中的元素数。
  3. n 为数字 0。
  4. 对于名称中的每个字符串 argName,按列表顺序执行
    1. n 是 n 加 1 的当前值。
    2. 如果 n 大于 argCount,则让 v 未定义,否则让 v args 的第 n元素的值。

将函数表达式作为参数传递与传递其他任何内容没有什么不同。根据 13 函数定义和 13.2 创建函数对象创建函数对象,并将该值作为参数传递。它将通过参数或arguments提供。

参数是函数范围内的变量。

结果是undefined的,因为除非您从函数中显式return某些内容,否则该函数会隐式返回"undefined"。

您动态创建的匿名函数只能在a函数的范围内作为par1访问,就像您输入的任何其他参数一样。旁注:您的匿名函数缺少}