对象像函数的构造,JavaScript的
我一直在翻译一个JavaScript库到C#和我碰到一些奇怪的东西给我对象像函数的构造,JavaScript的
原作者有一个函数内部的“构造”。这是我以前从未见过的一种方式:
var name = function(/*parameters*/)
{
/*Set instance variables here*/
this.BMAX = 16; // maximum bit length of any code
this.N_MAX = 288; // maximum number of codes in any set
{
/*Constructor logic here*/
var a; // counter for codes of length k
var c = new Array(this.BMAX+1); // bit length count table
var el; // length of EOB code (value 256)
var f; // i repeats in table every f entries
//Etc....
}
}
这是常见的做法吗?这是我第一次看到这样做。
如果是这样,有人可以解释为什么有一组额外的括号?为什么不把它们全部放在那里?
这是否“有效”?
好吧,我迟到了下降的答案,答案已经是很大的,但并不真正解释{}声明的实际内容。
这就是所谓的语句块描述所谓的复合语句,这意味着它可以让你添加多个substatements地方的JavaScript只需要一个子语句。
你可能已经看到了这一点已经
if(foo)
doStomething();
else
doSomethingElse();
,并问过自己?搞什么鬼?那些大括号在哪里?这不是特例。这就是javascript中大多数语句的样子,他们通常期望在默认情况下使用单个语句。通过使用语句块,我们可以将其扩展为复合语句,其中包含尽可能多的子语言。
是否存在与语句块相反的内容?是的,这就是所谓的空的陈述;
。这意味着没有声明预计单一的陈述。
for(var i=0; i<100; i++); //empty statement
console.log(i); //Is called once, logs "100"
doSomething(i); //Is called once, with 100 as argument;
这是完全有效的,即使在这种情况下无用。但是,这也是一种可以用于循环的方式,它有时更短,更优雅。
for(var i=0; i<100; i++) //no empty statement
console.log(i); //Is called 100 times, logs 0 - 99
doSomething(i); //Is called once with 100 as argument;
最后喜欢它通常写的,与复合语句
for(var i=0; i<100; i++){ //compound statement
console.log(i); //logs 100 times
doSomething(i); //gets called 100 times
}
由于大括号也是对象字面它当然很难分辨它们有时,但它们是完全不同的事情。
这是我正在寻找的答案,谢谢。对不起,其他的老兄。 – FabianCook 2014-09-29 18:53:20
这是有效的是的,我会说这样做只是为了将构造函数逻辑从其他代码中分离出来,因为在这样的范围内声明的任何变量在括号外仍然可见(只要您处于相同的功能)。
它用于任何功能性用途
我肮脏的秘密:我有时会做这样的使用JavaScript,使Visual Studio的自动缩进代码我。
用于使用VS.移动到WebStorm,Sublime和MonoDevelop,Linux FTW – FabianCook 2014-09-29 10:19:18
我真的很喜欢VS,用它太久了,真的不想看看其他的IDE,但是因为你听起来像你发现新工具中的灯光,你想分享我是什么让他们如此伟大? (谁知道,有一天我可能不得不使用linux作为我的主要工作平台,而我用的更好的工具则不那么麻烦,因为我会用它(阅读:一直使用微软产品太长,太愚蠢以至于找不到新工具)) – Snellface 2014-09-29 10:35:48
在代码中添加额外括号是绝对没有意义的。
在功能上,它什么也没加。这只是一个应该在评论中完成的视觉分离。
我可以看到这导致问题,如果代码已经过压缩,即使是:
var a = 1
{
var b = 2
}
VS:
var a = 1{var b = 2}
// SyntaxError: Unexpected token {
额外块,从减少的代码片段,似乎任何起不到任何作用。 – Quentin 2014-09-29 10:11:44
我可以发布完整的代码,但它会大......它的压缩库 – FabianCook 2014-09-29 10:12:06
你应该删除90%的变量。留下足够的关键点;-) – Cerbrus 2014-09-29 10:16:26