這是爲什麼,當我返回一個功能,我不能有更多的代碼在它下面return語句的JavaScript
樣品
<script language="javascript">
return compute();
alert(1);
</script>
警報將不工作
這是爲什麼,當我返回一個功能,我不能有更多的代碼在它下面return語句的JavaScript
樣品
<script language="javascript">
return compute();
alert(1);
</script>
警報將不工作
return
聲明的功能是雙重的。首先,它返回一個值(在這種情況下是一個指向函數的指針)。其次,它將管理control flow,也就是說,它告訴瀏覽器正在執行該代碼以離開該函數,並將執行控制返回給調用示例腳本的代碼片段。
換個說法,試圖返回一個值,同時也期望繼續執行,這使瀏覽器接下來要做的事情變得模糊不清。
如果您要翻轉兩行(首先警告,THEN返回值),則會導致兩行執行。
This tutorial也可能提供進一步的見解。
而且,Rob W和Kris Krause注意,你只能從return
的功能,但還有你的代碼不裹的功能。
小改正:在這種情況下(我假設OP的例子)返回值是'compute()'返回的值,不一定是函數。 'return compute;'會返回'compute()'函數。 – JJJ
函數/閉包內部,你可以在可以在你的return語句下面有代碼。具體來說,函數聲明將被提升,以便它們可以被返回之上的代碼使用。我一直使用這個「模式」,這裏是我當前代碼庫的一個小例子:
function msgHandlers() {
var scope
,msgs;
return {
SET_CONTEXT: function(context) {
scope = context.scope;
msgs = context.messages;
}
,SUBSCRIBE_ALL: function() {
me.subscribe(scope, msgs.ITEM_PINNED, itemPinnedHandler);
}
}
function itemPinnedHandler(record) {
loadInventoryRecord(record);
}
}
因爲'return'只能在函數上下文中使用。 –