传递给 IIFE 的对象 属性(数字)的类型返回未定义。为什么?

typeof of an object property (number) on passing to IIFE is returning undefined. Why?

怎么输出的不是数字?

怎么样?

<script>

x = (function(foo){
  return typeof(foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

</script>

如果应该foo.foo.bar

foo参数是一个对象,里面有一个叫foo的属性

x = (function(foo) {
  return typeof(foo.foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

您可能打算像这样解构论点:

x = (function({ foo }) {
  return typeof(foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

foo 是参数。您必须使用 访问函数内部的属性。符号

x = (function(foo){
  return typeof(foo.foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

你函数中的 foo 参数是整个对象(不是嵌套对象):

{ foo: { bar: 1 } }

因此,当您执行 foo.bar 时,没有 bar 属性,因此您会得到 undefined

因此,typeof undefined会给你"undefined"。相反,您可以使用更清晰的 属性 名称,以便每个对象的类型易于理解,然后从您的参数中访问 foo 属性:

x = (function(obj){
  return typeof(obj.foo.bar);
})({ foo: { bar: 1 } });

console.log(x);

您可以在函数参数中解构 foo

let x = (function({foo}){
  return typeof(foo.bar);
})({ foo: { bar: 1 } });

console.log(x);