我在TS中遇到此错误:
很清楚错误发生的原因:
function outer(){
if (true) {
function inner(){ // nested function declaration
}
}
}
但我的问题是 - 为什么TS会抱怨 - 是否有一些技术原因我应该在转换到ES5时避免嵌套函数声明?
函数表达式是一个更好的选择,为什么?
答案 0 :(得分:3)
函数表达式是否是更好的选择
是。以下是要走的路:
<?php
//including the database connection file
include("config.php");
$result = mysqli_query($mysqli, "SELECT * FROM users ORDER BY id ASC");
// using mysqli_query instead
while($res = mysqli_fetch_array($result))
{
?>
<table>
<tr>
<td class="long"><?php echo $res['nameFirst'];?></td>
<td class="long"><?php echo $res['nameLast'];?></td>
<td class="long"><?php echo $res['email'];?></td>
<td><a href="edit.php?id=$res[id]">Edit</a></td>
<td><a href="delete.php?id=<?php echo $res['id']; ?>" onClick="return confirm('Are you sure you want to delete?')">Delete</a></td>
</tr>
<?php } ?>
</table>
为什么?
original JavaScript specification涵盖了被禁止的原因。简短版本:实现之间的行为不一致。
注意已知几种广泛使用的ECMAScript实现支持将FunctionDeclaration用作Statement。然而,在应用于此类FunctionDeclarations的语义中的实现之间存在显着且不可调和的变化。由于这些不可调和的差异,使用FunctionDeclaration作为Statement会导致代码在实现中无法可靠地移植。建议ECMAScript实现不允许使用FunctionDeclaration,或在遇到此类用法时发出警告。 ECMAScript的未来版本可以定义用于在Statement上下文中声明函数的替代可移植方法。
因此,当严格模式产生(ES5)时,它就被禁止了。