I think this is a different slant on this question. And maybe the question is better phrased, when would you use public, as opposed to export? From my reading it seems like anywhere a C#/Java person thinks public, what you actually want is export.
When/where would you use public instead of export?
public
as a visibility modifier technically does nothing (all class members are public by default); it exists as an explicit counterpart toprivate
. It's legal only inside classes.export
does two different things depending on its context (on a top-level member in a file or in amodule
block).At the top level of a file,
export
means that the containing file is an external module (i.e. it will be loaded using RequireJS, Node'srequire
command, or some other CommonJS/AMD-compliant loader) and that the symbol you putexport
on should be an exported member of that external module.Inside a
module
block,export
means that the specified member is visible outside that module block. The default for things inmodule
blocks is "closure privacy" -- unexported objects are not visible outside the module. When a declaration inside amodule
has theexport
modifier, it instead becomes a property of the module object that can be accessed from outside the module.There is no place in the language where both
public
andexport
are legal, so choosing is relatively easy in that regard.export
is specifically for modules e.g.:public
is for class members / methods e.g.:If you want to learn more about modules I did a video on that : http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1