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

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

对不起英语,感谢您的帮助。
答案 0 :(得分:2)
参数是在处理的编译阶段在函数范围内声明的变量。
您获得的未定义结果表示该变量存在,但尚无值。未定义是其默认值。
请阅读此处以了解有关它的更多信息 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
编辑:忘了你的第二个问题。匿名函数是在全局范围内创建的(如果它们不在另一个范围内)并且您无法再次调用它们
答案 1 :(得分:1)
请参阅10.5 Declaration Binding Instantiation:
每个执行上下文都有一个关联的VariableEnvironment。 在ECMAScript代码中声明的变量和函数在 执行上下文作为绑定添加到其中 VariableEnvironment的Environment Record。对于功能代码, 参数也作为绑定添加到Environment Record。
如果未指定参数,则相应参数的值将变为未定义:
- 让 func 成为[[Call]]内部方法启动执行代码的函数。让名称为 func 的值 [[FormalParameters]]内部财产。
- 让 argCount 为 args 中的元素数。
- 让 n 为数字0。
- 对于名称中的每个String argName ,按列表顺序执行
醇>
- 让 n 为 n 的当前值加1。
- 如果 n 大于 argCount ,请 v 未定义,否则请 v 是args的 n '元素的值。
将函数表达式作为参数传递与传递任何其他内容没有什么不同。根据{{3}}和13 Function Definition创建一个函数对象,该值作为参数传递。它可以通过参数或arguments
。
答案 2 :(得分:1)
参数是函数范围内的变量。
结果是undefined
因为除非你明确return
函数中的某些内容,否则函数会隐式返回“undefined”。
您即时创建的匿名函数只能在a
函数的范围内作为par1
访问,就像您输入的任何其他参数一样。
附注:您的匿名函数缺少}