语法错误: JavaScript 中的非法返回语句

当我运行这段代码时,我得到了一个非常奇怪的 JavaScript 错误:

<script type = 'text/javascript'>
var ask = confirm('".$message."');
if (ask == false)
{
return false;
}


else
{
return true;
}
</script>

在 JavaScript 控制台中显示:

Syntax Error: Illegal return statement

它发生在 return true;return false;

(我从一个 php 函数回显了这个 javascript; $message变量是 php 参数之一)

我的代码有什么问题吗?

180865 次浏览

return只在函数内部有意义。在你的代码中没有函数。

此外,您的代码是值得的,如果部门冗余部门。假设你把它移动到一个正确的函数,这样会更好:

return confirm(".json_encode($message).");

编辑更晚: 更改代码以使用 json_encode,以确保消息内容不会仅仅因为消息中的一个撇号而中断。

如果你想返回一些值,那么在函数中包装你的语句

function my_function(){


return my_thing;
}

如果您试图使用 PHP,那么第一行中的语句存在问题

var ask = confirm ('".$message."');

如果您正在尝试使用 PHP,您应该使用

 var ask = confirm (<?php echo "'".$message."'" ?>); //now message with be the javascript string!!

在 javascript 返回语句中只在函数块中使用。如果您尝试在独立的条件下使用 return 语句,则 if else 阻止它触发语法错误: JavaScript 中的非法 return 语句

下面是避免这种错误的示例代码:

<script type = 'text/javascript'>
(function(){
var ss= 'no';
if(getStatus(ss)){
alert('Status return true');
}else{
alert('Status return false');
}


function getStatus(ask){
if(ask=='yes')
{
return true;
}
else
{
return false;
}
}
})();
</script>

请检查 Jsfiddle示例

您要在哪里返回值? 在开发工具中控制台对于调试更好

<script type = 'text/javascript'>
var ask = confirm('".$message."');
function answer(){
if(ask==false){
return false;
} else {
return true;
}
}
console.log("ask : ", ask);
console.log("answer : ", answer());
</script>

根据我的经验,这个错误消息通常意味着您在某处放置了一个意外的结束大括号,将其余语句留在函数之外。

例如:

function a() {
if (global_block) //syntax error is actually here - missing opening brace
return;
} //this unintentionally ends the function


if (global_somethingelse) {
//Chrome will show the error occurring here,
//but actually the error is in the previous statement
return;
}


//do something
}

如果对静态方法使用不正确(旧的)语法,那么在 ES6中可能会发生这种情况:

export default class MyClass
{
constructor()
{
...
}


myMethod()
{
...
}
}


MyClass.someEnum = {Red: 0, Green: 1, Blue: 2}; //works


MyClass.anotherMethod() //or
MyClass.anotherMethod = function()
{
return something; //doesn't work
}

而正确的语法是:

export default class MyClass
{
constructor()
{
...
}


myMethod()
{
...
}


static anotherMethod()
{
return something; //works
}
}


MyClass.someEnum = {Red: 0, Green: 1, Blue: 2}; //works

只是我忘记在函数前面声明单词“ function”了。 是的

myFunc(num)
{
if(num > 0)
return;
}

这会产生“非法返回语句”错误,因为在 myFunc (num)之前错过了“ function”

正确形式:

function myFunc(num)
{
if(num > 0)
return;
}