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

时间:2013-04-17 19:14:27

标签: javascript syntax-error

运行此代码时,我收到一个非常奇怪的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参数之一)

我的代码出了什么问题?

7 个答案:

答案 0 :(得分:77)

return只在函数内部有意义。您的代码中没有任何功能。

另外,如果冗余部门你的代码是值得的。假设你把它移到一个合适的函数,这会更好:

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

稍后编辑:更改代码以使用json_encode来确保消息内容不会因为消息中的撇号而中断。

答案 1 :(得分:4)

如果要返回某个值,请将语句包装在函数

function my_function(){ 

 return my_thing; 
}

如果您尝试使用PHP

,问题在于第1行的语句
var ask = confirm ('".$message."'); 

如果您尝试使用PHP,则应使用

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

答案 2 :(得分:0)

在javascript返回语句中仅用于功能块内部。如果你尝试在独立的if if块中使用return语句,则会触发语法错误:JavaScript中的非法返回语句

以下是我避免此类错误的示例代码:

PrimeFaces.widget.Menubar.prototype.deactivate = function(b, a) {
       var menu = this;
       menu.activeitem = null;
       b.children("a.ui-menuitem-link").removeClass(
                    "ui-state-hover ui-state-active");
       b.removeClass("ui-menuitem-active ui-menuitem-highlight");
       if (a) {
             b.children("ul.ui-menu-child").fadeOut("fast");
       } else {
             b.children("ul.ui-menu-child").hide();
             if (!this.timer) {
                    this.timer = setTimeout(function() {
                           menu.reset();
                    }, 300);
             }
       }
}

PrimeFaces.widget.Menubar.prototype.reactivate = function(d) {
       if (this.timer) {
             clearTimeout(this.timer);
             this.timer = null;
       }
       this.activeitem = d;
       var c = d.children("ul.ui-menu-child"), b = c
                    .children("li.ui-menuitem-active:first"), a = this;
       if (b.length == 1) {
             a.deactivate(b)
       }
}

PrimeFaces.widget.Menubar.prototype.activate = function(b) {
       if (this.timer) {
             clearTimeout(this.timer);
             this.timer = null;
       }
       this.highlight(b);
       var a = b.children("ul.ui-menu-child");
       if (a.length == 1) {
             this.showSubmenu(b, a)
       }
}

请检查Jsfiddle示例

答案 3 :(得分:0)

你想在哪里返回这个值? 在开发工具中使用控制台更适合调试

<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>

答案 4 :(得分:0)

根据我的经验,大多数情况下,此错误消息意味着您在某处放置了一个意外的右括号,将其余的语句留在函数之外。

示例:

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
}

答案 5 :(得分:0)

如果对静态方法使用不正确的(较旧的)语法,则可能会在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

答案 6 :(得分:0)

只是我忘了在函数之前声明“函数”这个词。 es

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

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

正确的形式:

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