是否使用' var '
您应该使用var语句引入任何变量,否则它将进入全局作用域。
值得一提的是,在严格模式下("use strict";)未声明的变量赋值会抛出ReferenceError。
目前JavaScript还没有块作用域。Crockford学派教导您将var语句放在函数体的开头,而Dojo的Style Guide则指出,所有变量都应该在尽可能小的范围内声明。(JavaScript 1.7中引入的let语句和定义不是ECMAScript标准的一部分。)
将经常使用的对象的属性绑定到局部变量是一个很好的实践,因为这比查找整个作用域链要快。(请参见优化JavaScript以获得最佳性能和低内存消耗。)
在文件或“(function(){…})()”中定义内容
如果您不需要在代码之外访问对象,您可以将整个代码包装在函数表达式中——这被称为模块模式。它具有性能优势,还允许在较高的级别上简化和模糊代码。您还可以确保它不会污染全局名称空间。在JavaScript中包装函数还允许添加面向方面的行为。Ben Cherry有一篇关于模块模式的深入文章。
是否使用“this”
如果在JavaScript中使用伪经典继承,就很难避免使用它。使用哪种继承模式只是个人喜好的问题。对于其他情况,请查看Peter Michaux关于JavaScript Widgets Without“this”的文章。
使用' function myname() '或' myname = function(); '
function myname() is a function declaration and myname = function(); is a function expression assigned to variable myname. The latter form indicates that functions are first-class objects, and you can do anything with them, as with a variable. The only difference between them is that all function declarations are hoisted to the top of the scope, which may matter in certain cases. Otherwise they are equal. function foo() is a shorthand form. Further details on hoisting can be found in the JavaScript Scoping and Hoisting article.
在对象主体中定义方法或使用“prototype”
由你决定。JavaScript有四种对象创建模式:伪经典模式、原型模式、函数模式和部分模式(Crockford, 2008)。每一种都有其优点和缺点,看看Crockford的视频演讲,或者像Anon已经建议的那样买他的书《The Good Parts》。
框架
我建议您选择一些JavaScript框架,研究它们的约定和风格,并找到最适合您的实践和模式。例如,Dojo Toolkit提供了一个健壮的框架来编写面向对象的JavaScript代码,甚至还支持多重继承。
模式
最后,有一个博客专门探讨常见的JavaScript模式和反模式。还可以查看“JavaScript有编码标准吗?”在Stack Overflow。