运行此代码时,我收到一个非常奇怪的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参数之一)
我的代码出了什么问题?
答案 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;
}