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