See: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-bindinginstantiation
In this algorithm, the conditional binding operation checks if IsConstantDeclaration is false:
If IsConstantDeclaration of LetOrConst is false, then
Call environment’s CreateMutableBinding concrete method with argument name.
Assert: The above call to CreateMutableBinding will never return an abrupt completion.
Else,
Call environment’s CreateImmutableBinding concrete method with argument name.
The rest of the spec checks if IsConstantDeclaration is true:
9.2.14 Function Declaration Instantiation
If IsConstantDeclaration of d is true, then
Call env’s CreateImmutableBinding concrete method passing dn as the argument.
Else,
Let status be the result of calling env’s CreateMutableBinding concrete method passing dn and false as the arguments.
Assert: status is never an abrupt completion.
15.1.8 Runtime Semantics: GlobalDeclarationInstantiation
If IsConstantDeclaration of d is true, then
Let status be the result of calling env’s CreateImmutableBinding concrete method passing dn as the argument.
Else,
Let status be the result of calling env’s CreateMutableBinding concrete method passing dn and false as the arguments.
I suggest re-ordering the first to be consistent with the other algorithms
fixed in rev23 editor's draft
fixed in rev23 draft