Skip to content

Instantly share code, notes, and snippets.

@graue
Last active December 14, 2015 11:29
Show Gist options
  • Save graue/5079734 to your computer and use it in GitHub Desktop.
Save graue/5079734 to your computer and use it in GitHub Desktop.
Weirdness with JS closures (Lua behaves differently).
NOTE: Scroll down for explanation (the difference turns out to be scoping, not closures per se).
$ cat juices.lua
local fruits = {"apple", "orange", "grape"}
local juicers = {}
for i,v in ipairs(fruits) do
local fruit = v
juicers[i] = function() return fruit .. " juice" end
end
print(juicers[1]());
print(juicers[2]());
print(juicers[3]());
$ lua juices.lua
apple juice
orange juice
grape juice
$ cat juices.js
var fruits = ["apple", "orange", "grape"];
var juicers = [];
for (var i in fruits) {
var fruit = fruits[i];
juicers[i] = function() { return fruit + " juice"; }
}
console.log(juicers[0]());
console.log(juicers[1]());
console.log(juicers[2]());
$ node juices.js
grape juice
grape juice
grape juice
@dschobel
Copy link

dschobel commented Mar 4, 2013

yeah, so long story short, block scoping makes the world sane and python and javascript are inferior for not having it. that's my conclusion to all this :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment