Javascript 为什么我会感到意外;(“标记”在下面的脚本中?

Javascript 为什么我会感到意外;(“标记”在下面的脚本中?,javascript,syntax-error,Javascript,Syntax Error,好的,我知道我在做什么,我故意希望我的页面上有很多这样的多个脚本,因为这些脚本不应该在加载时进行评估,但是如果我设置type=“something other”,那么我就不会得到intellisense和validation,这会在开发过程中造成麻烦 <script type="text/javascript" id="s"> { // <- following '(' is unexpected update: function

好的,我知道我在做什么,我故意希望我的页面上有很多这样的多个脚本,因为这些脚本不应该在加载时进行评估,但是如果我设置type=“something other”,那么我就不会得到intellisense和validation,这会在开发过程中造成麻烦

<script type="text/javascript" id="s">
{
    //                <- following '(' is unexpected
    update: function (o){
        alert(o);
    }
}
</script>

{

//Javascript希望得到一个提示,
{…}
是一个表达式:

 ({
    update: function x(o){
        alert("s-update: " + o);
    },
    method: function x(y){
        alert("s-method: " + y);
    }
})

({
更新:功能(o){
警报(“j-更新:+o”);
},
方法:函数(y){
警报(“j方法:+y”);
}
})

第二条语句是有效的,因为
update:
被解释为一个标签,而不是对象的键。必须用括号括住匿名对象才能使其工作


第三个是无效的,因为一个错位的列表运算符(在本例中解释为

{
表示JavaScript中一个块的开始,如下代码段(有效语法)所示:

在内部,这被转换为以下顺序(记住变量声明是提升的,而不是块范围的):

  • 定义变量hello
  • {
  • 将值“test”分配给Hello
  • 端块
  • 忽略该块,它相当于
    var hello=“test”

    {
        //                <- following '(' is unexpected
        update: function (o){
            alert(o);
        }
    }
    
    语法错误的原因是函数语句必须有一个名称。在第二个示例中,函数语句是有效的,因为它有一个名称。两个函数语句的名称都在第三个,但在函数语句后面的
    无效


    正如其他人所提到的,当你用大括号将整件事情包装起来时,这个问题就解决了,因为代码变成了一个表达式,因此变成了法律语法。

    +1我感到惭愧!!!它这么简单吗…?工作正确吗?如果你能给我更多的文档,让我可以了解更多,我将不胜感激,x和y是强制性的还是可以n也可以被删除。这是说执行脚本有什么害处,还是根本就没有执行?Andy E解释道(顺便说一句,我接受他的回答).x,y只有在需要良好的回溯或使用函数进行递归时才有用。表达式是否已计算?我想即使是,也没有什么害处,对吗?@Akash:是的,表达式将在大多数浏览器中计算,除非浏览器进行优化以忽略未赋值的表达式(我见过IE9对一些表达式这样做)由于你的代码没有做任何事情,它相对无害,只会花费解析所需的时间。
     ({
        update: function x(o){
            alert("s-update: " + o);
        },
        method: function x(y){
            alert("s-method: " + y);
        }
    })
    
    <script type="text/javascript" id="s">
    ({
        update: function(o){
            alert("j-update: " + o);
        },
        method: function(y){
            alert("j-method: " + y);
        }
    })
    </script>
    
    { var hello = "test" } 
    
    {
        //                <- following '(' is unexpected
        update: function (o){
            alert(o);
        }
    }
    
    update: function (o){
        alert(o);
    }