当前位置: 首页 > 面试题库 >

当return语句和对象之间有换行符时,JavaScript函数无法返回对象?

苏鸿志
2023-03-14
问题内容

完整代码

function foo1(){
    return {msg: "hello1"};
}
function foo2(){
    return
    {msg: "hello2"};
}

// output = "foo1 =  {"msg":"hello1"}"
console.log('foo1 = ' , JSON.stringify(foo1()));

//output = " foo2 =  undefined "
console.log('foo2 = ' , JSON.stringify(foo2()));

两者之间的区别在于,在foo2中,the {msg: 'hello'}位于其自己的新行中。我期望解析器忽略空格?


问题答案:

tl; dr
换行引起第二个函数的“未定义”。JavaScript在很多情况下不需要分号,而只是在某些情况下假定它们自动分号插入。

在某些情况下,为避免此ASI问题并出于美学原因,我使用了所谓的分组运算符。例如,使用hoquet模板DSL(它将Array作为s表达式编译为HTML),我喜欢对Array进行分组,以便它们清楚地显示HTML结构:

return (
  ["ul"
  , ["li"
    , ["span", {class: "name"}, this.name]
    , ["span", {id: "x"}, "x"]
    ]
  ]
);

对于我来说,这似乎更清晰或更一致

return [
  "ul",
  [
    "li",
    ["span", {class: "name"}, this.name],
    ["span", {id: "x"}, "x"]
  ]
];

它们最终以相同的行数结束。但这确实是美学问题。

分组运算符只计算其中的任何表达式。在“立即调用函数表达式”中通常会看到这种情况,您需要将通常是函数声明的内容转换为表达式,然后可以立即调用该表达式(因此称为名称)。但是,分组运算符的一个鲜为人知的特征是它也可以采用逗号分隔的表达式列表,例如

function() {
  return (
    doSideEffects(),
    console.log("this is the second side effect"),
    1 + 1
  );
}

在这种情况下,它将计算这些表达式中的每一个,并仅返回最后一个(1 + 1)。



 类似资料:
  • 在 C 中,当一个应该返回对象的函数在没有 return 语句的情况下结束时会发生什么?会得到什么回报? 例如。

  • 问题内容: 我刚刚学习(正在学习)函数参数在Python中的工作方式,并且在没有明显原因的情况下开始进行实验: 给出了输出: 哪里来的?还有,这是什么? 问题答案: 它是函数的返回值,您可以将其打印出来。如果没有语句(或者只是没有参数的),则将隐式添加到函数的末尾。 您可能想返回函数中的值,而不是打印它们:

  • 问题内容: 考虑以下JavaScript: 上面的代码片段中的方法返回的是正确的值,在这种情况下。但是,该方法返回。大多数其他语言不是这种情况。 但是,以下函数是正确的,并返回正确的值。 如果语法错误,它应该发出一些编译器错误,但不会。为什么会这样? 问题答案: 从技术上讲,JavaScript中的半冒号是可选的。但是实际上 , 如果它认为缺少某些换行符, 它只会为您插入它们 。但是它为您带来的决

  • 为什么返回的时候只能写成return obj[checkProp]; 而不能写成return obj.checkProp;会输出Undefined

  • return语句用来从一个函数 返回 即跳出函数。我们也可选从函数 返回一个值 。 使用字面意义上的语句 例7.7 使用字面意义上的语句 #!/usr/bin/python # Filename: func_return.py defmaximum(x, y):     ifx > y:         returnx     else:         returny printmaximum(

  • 这是MyFragmentPagerAdapter类,它扩展了FragmentPagerAdapter。返回我的片段时发现错误 我的国家详情如下。它扩展了Fragment,我将2个文本视图填充到一个视图寻呼机中,如下所示。 堆栈跟踪如下 03-03 05:15:31.093: E/AndreidRuntime(910): FATAL EXCEPTION: main 03-03 05:15:31.09