JS如何处理函数参数
How JS treat function parameters?
我知道在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 代码中声明的变量和函数在 执行上下文作为绑定添加在其中 变量环境的环境记录。对于函数代码, 参数也会作为绑定添加到该环境记录。
如果未指定参数,则相应参数的值将变为未定义:
- 让 func 成为其 [[Call]] 内部方法启动代码执行的函数。让名称成为函数的值 [[形式参数]] 内部属性。
- 设 argCount 是 args 中的元素数。
- 设 n 为数字 0。
- 对于名称中的每个字符串 argName,按列表顺序执行
- 设 n 是 n 加 1 的当前值。
- 如果 n 大于 argCount,则让 v 未定义,否则让 v 是 args 的第 n 个元素的值。
将函数表达式作为参数传递与传递其他任何内容没有什么不同。根据 13 函数定义和 13.2 创建函数对象创建函数对象,并将该值作为参数传递。它将通过参数或arguments
提供。
参数是函数范围内的变量。
结果是undefined
的,因为除非您从函数中显式return
某些内容,否则该函数会隐式返回"undefined"。
您动态创建的匿名函数只能在a
函数的范围内作为par1
访问,就像您输入的任何其他参数一样。旁注:您的匿名函数缺少}
- 如何使用排列运算符来获取具有命名参数的函数的所有参数
- Javascript在处理函数时防止单击
- 使用带有两个参数的函数的javascript映射
- 如何在ES6类中使用参数调用函数
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 传递带有参数的函数
- 当我在Javascript中给出的参数超过函数所需的参数时会发生什么
- 如何异步处理:函数C取决于函数B取决于函数A
- AngularJS-点击对象,访问它's ID&以该ID作为参数激发函数
- Javascript 如何处理函数参数
- JS如何处理函数参数
- node.js async.maplimit() 将额外的参数传递给处理函数
- application如何处理接受逗号分隔参数的函数
- 如何处理函数中的可选参数
- 创建一个处理可选参数的函数
- 在AngularJS中参数化$http响应处理函数
- Socket.io:如何正确处理函数参数
- 将带有参数的函数传递给事件处理程序
- 如何在事件处理函数中获取事件对象而不将其作为参数传递