好的,我知道我在做什么,我故意想要在我的页面上有很多这样的多个脚本,因为这些脚本不应该在加载时进行评估,但是如果我设置type =“something else”那么我不要在开发过程中获得智能感知和验证。
<script type="text/javascript" id="s">
{
// <- following '(' is unexpected
update: function (o){
alert(o);
}
}
</script>
然而,当我这样做时,没关系,
<script type="text/javascript" id="s">
{
update: function x(o){
alert(o);
}
}
</script>
注意圆括号前的“x”。问题是,如果我写“x”,则window.x设置为此方法,编写多个脚本会产生更多问题。
当我将其更改为时,
<script type="text/javascript" id="s">
{
update: function x(o){
alert("s-update: " + o);
},
method: function x(y){
alert("s-method: " + y);
}
}
</script>
然后我在method
之前得到意外的标记','。
,
并且删除了,
,则会收到脚本错误,因此我没有收到脚本错误,但我的代码未执行,{{ 3}}。答案 0 :(得分:5)
Javascript需要提示{ ... }
是一个表达式:
({
update: function x(o){
alert("s-update: " + o);
},
method: function x(y){
alert("s-method: " + y);
}
})
答案 1 :(得分:2)
<script type="text/javascript" id="s">
({
update: function(o){
alert("j-update: " + o);
},
method: function(y){
alert("j-method: " + y);
}
})
</script>
答案 2 :(得分:2)
第二个语句有效,因为update:
被解释为标签,而不是对象的键。您必须用括号括起匿名对象才能使其正常工作。
第三个是无效的,因为错误的列表运算符(在这种情况下,
被解释为)。
答案 3 :(得分:2)
{
表示JavaScript中块的开始,如下面的代码片段(有效语法)所示:
{ var hello = "test" }
在内部,这被转换为以下序列(记住变量声明被提升而不是块作用域):
{
忽略该块,它等同于var hello = "test"
。如果我们将相同的逻辑应用于您的代码,那么
{
// <- following '(' is unexpected
update: function (o){
alert(o);
}
}
被翻译成以下序列:
{
忽略块分隔符,代码被解释为:
update: function (o){
alert(o);
}
语法错误的原因是函数语句必须具有名称。在第二个示例中,函数语句有效,因为它具有名称。两个函数语句在第3个中都有名称,但在跟随函数语句时,
无效。
正如其他人所提到的,当你用括号包装整个东西时问题就解决了,因为代码变成了一个表达式,因此也就是法律语法。