我正在尝试在javascript中"string"+function(){return "string"}
document.write()
中联接document.write("I don't know "+function(){if(true){return "why does it concat?"}});
。
例如:
I don't know function (){if(true){return "why does it concat?"}}
它会打印出类似这样的东西(看到它在jsfiddle中运行:http://jsfiddle.net/sadaf2605/3AuLD/):
{{1}}
我知道我写了一些非常愚蠢的东西,我需要一个功能才能完成它但仍然为什么要打印这样的东西?我很好奇!
答案 0 :(得分:3)
您需要的是:
document.write("I don't know "+ (function(){if(true){return "why does it concat?"}})());
^_______ ^_____
您没有执行此功能。您可以创建一个立即执行的函数。此外,由于您有一个操作数字符串,并且您正在使用+
运算符,因此您的函数表达式也会自动转换为字符串。
当你只使用function(){if(true){return "why does it concat?"}}
时,它只是一个函数引用而不是结果,所以你可以看到结果。您需要执行该函数并获取返回值。
答案 1 :(得分:3)
如果你问为什么它打印它做了什么,那是因为你的函数被转换为字符串(通过它的toString
方法),因为你试图连接一个字符串和一个函数对象。当函数转换为字符串时,将返回其源代码(除非它是本机函数)。
根据语言规范(15.3.4.2):
Function.prototype.toString()
函数的依赖于实现的表示是 回。此表示具有FunctionDeclaration的语法。 特别注意使用和放置白色空间,线条 终结符和表示字符串中的分号是 实现相关的。