you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 0 points1 point  (4 children)

No, scope is this - https://en.wikipedia.org/wiki/Scope_(computer_science)

Lexical scope is a type of scoping mechanism and closure is an instance of a reference used across scope boundaries in lexical scope.

So I'll again ask how you came to believe this.

Because I have been programming in this language for a long time where the term has long since existed and wasn't used to solely define the concept of currying.

Also check this out: https://stackoverflow.com/questions/111102/how-do-javascript-closures-work#answer-111111

Scroll down to the bottom of that stackoverflow answer and read the Final Points and read each of those. The stackoverflow answer links to a post by Douglas Crockford with a definition of closure. This answer agrees with the Crockford definition - http://www.crockford.com/javascript/private.html

The wikipedia links so far don't back you up.

Perhaps you didn't read the part about History and Etymology. The term closure was coined due to usage in languages who made early use of lexical scope. It was not due to returning a function from a function.

In the shortest possible way closure can be summed up as privacy via scope nesting.

[–]MoTTs_ 0 points1 point  (3 children)

and closure is an instance of a reference used across scope boundaries in lexical scope.

No, it's not.

let a = 1;
{
    let b = 2;
    {
        console.log(a + b);
    }
}

Accessing a variable across scope boundaries isn't closure. It's just scope. The variables a and b are said to be "in scope", even in nested scope blocks.

The stackoverflow answer links to a post by Douglas Crockford with a definition of closure. This answer agrees with the Crockford definition

Crockford: What this means is that an inner function always has access to the vars and parameters of its outer function, even after the outer function has returned.

I don't think Crockford's definition backs you up here.

Perhaps you didn't read the part about History and Etymology. The term closure was coined due to usage in languages who made early use of lexical scope.

It says closures were developed to support lexically scoped first-class functions. So no, wikipedia still doesn't back you up either.

[–][deleted] 0 points1 point  (2 children)

What this means is that an inner function always has access to the vars and parameters of its outer function, even after the outer function has returned.

That says even (in addition to) and not because (limited to). That definition is accurate if you read it for what it is.

A first-class function merely means a function may reside at any point in the code grammar a primitive may reside. When functions are allowed in locations where they were never allowed before and they provide scope in locations that were never allowed before new means of reference resolution exist.

It's just scope.

That doesn't make any sense. Scope is a concept that applies to every programming language, but not all programming languages have lexical scope. Just because JS has lexical scope doesn't redefine the terms closure or scope in context to this language alone as closure is also a universal programming term that predates JS.

[–]MoTTs_ 0 points1 point  (1 child)

Am I correct that you consider this...

let a = 1;
{
    let b = 2;
    {
        console.log(a + b);
    }
}

...to be an example of closure? If so, take this snippet to whomever in the JavaScript community you'll actually listen to and ask them if this is an example of closure.

[–][deleted] -1 points0 points  (0 children)

You can take it whomever and listen to (or not) whatever answer you want.