It probably refers to the fact that variables by default are global. If you prefix them with var they're function scoped, but there's no way to make them local to the curly braces of an "if" statement.
In scheme, lexical scoping is easily accomplished through the let form, and it's pretty hard to make a variable global by mistake.
So yes it does have lexical scoping in the sense that function arguments are lexically scoped, but that's the only scoping environment, and you can't hide that fact behind macros like you could in scheme if it was needed.
That’s roughly what I was thinking, but it seemed a little ridiculous to me — Javascript has lexical scoping, it’s just not required.
It seems like this argument conflates lexical scoping with the requirement that variables be lexically scoped. Lexical scoping (even if optional) is extremely useful for closures. Requiring lexical scoping would very useful for safety.
In the first case the lack of a whereDidThisComeFrom declaration in scope would imply that it meant `window.whereDidThisComeFrom` (in normal mode) or would imply a reference error (in strict mode) wouldn't it. Lua does the same thing and I never saw anyone complain about its lexical scoping.
scheme@(guile-user)> (define (foo) (write where-did-this-come-from))
;;; <stdin>:1:14: warning: possibly unbound variable `where-did-this-come-from'
scheme@(guile-user)> (define where-did-this-come-from "the damn global scope")
scheme@(guile-user)> (foo)
"the damn global scope"scheme@(guile-user)>
Munificent's assertion that this doesn't represent lexical scoping is wrong, but his assertion in another thread that with() is an exception to lexical scoping is correct, and therefore JS is not lexically scoped, just mostly lexically scoped.
In scheme, lexical scoping is easily accomplished through the let form, and it's pretty hard to make a variable global by mistake.
So yes it does have lexical scoping in the sense that function arguments are lexically scoped, but that's the only scoping environment, and you can't hide that fact behind macros like you could in scheme if it was needed.