• a classical object model, complete with super()
• forced strict equality
• loop-local index variables (gets around the setTimeout(function() {console.log(i)}, 100) problem)
• all variables local unless explicitly declared otherwise
• CoffeeScript's splat arrays are totally different from JavaScript's arguments object
• list comprehensions (whether this is a semantic or syntactic change is debatable, I suppose, but the same could be said for basic OO)
• everything is an expression
The last one is a biggie that completely changes the meaning of many seemingly identical blocks of code. If that isn't a semantic change, what is?
• a classical object model, complete with super()
• forced strict equality
• loop-local index variables (gets around the setTimeout(function() {console.log(i)}, 100) problem)
• all variables local unless explicitly declared otherwise
• CoffeeScript's splat arrays are totally different from JavaScript's arguments object
• list comprehensions (whether this is a semantic or syntactic change is debatable, I suppose, but the same could be said for basic OO)
• everything is an expression
The last one is a biggie that completely changes the meaning of many seemingly identical blocks of code. If that isn't a semantic change, what is?