-2

我正在尝试在 javascript 中连接类似"string"+function(){return "string"}in的内容。document.write()

例如:

document.write("I don't know "+function(){if(true){return "why does it concat?"}});

它会打印出类似下面的内容(请参阅它在 jsfiddle 中运行:http: //jsfiddle.net/sadaf2605/3AuLD/):

I don't know function (){if(true){return "why does it concat?"}}

我知道我写了一些非常愚蠢的东西,我需要一个函数来完成它,但为什么要打印这样的东西?我对此很好奇!

4

2 回答 2

3

你需要的是:

document.write("I don't know "+ (function(){if(true){return "why does it concat?"}})());
                                ^_______                                             ^_____

您没有执行该功能。您可以创建一个立即执行的函数。此外,由于您的操作数之一是字符串,并且您正在+对它们使用运算符,因此您的函数表达式也会自动转换为字符串。

当您只使用function(){if(true){return "why does it concat?"}}它时,它只是一个函数引用而不是结果,因此您会以这种方式看到结果。您需要执行该函数并获取返回值。

于 2013-09-27T16:21:56.703 回答
3

如果你问它为什么打印它做了什么,那是因为你的函数被转换为字符串(通过它的toString方法),因为你试图连接一个字符串和一个函数对象。当函数转换为字符串时,会返回其源代码(除非它是本机函数)。

这根据语言规范(15.3.4.2)发生:

函数.prototype.toString()

返回函数的依赖于实现的表示。此表示具有 FunctionDeclaration 的语法。请特别注意,在表示字符串中使用和放置空格、行终止符和分号是依赖于实现的。

于 2013-09-27T16:24:45.927 回答