| // optimized |
| (function(b) { |
| assertEq("abc".replace(/a|b/g, function(a) { return b[a] }), 'ABc'); |
| })({a:'A', b:'B' }); |
| (function() { |
| var b = {a:'A', b:'B' }; |
| assertEq("abc".replace(/a|b/g, function(a) { return b[a] }), 'ABc'); |
| })(); |
| (function() { |
| { |
| let b = {a:'A', b:'B' }; |
| assertEq("abc".replace(/a|b/g, function(a) { return b[a] }), 'ABc'); |
| } |
| })(); |
| (function() { |
| var b = {a:'A', b:'B' }; |
| (function () { |
| assertEq("abc".replace(/a|b/g, function(a) { return b[a] }), 'ABc'); |
| })(); |
| })(); |
| (function() { |
| { |
| let b = {a:'A', b:'B' }; |
| (function () { |
| assertEq("abc".replace(/a|b/g, function(a) { return b[a] }), 'ABc'); |
| })(); |
| } |
| })(); |
| (function() { |
| var b = {a:'A', b:'B' }; |
| (function () { |
| (function () { |
| assertEq("abc".replace(/a|b/g, function(a) { return b[a] }), 'ABc'); |
| })(); |
| })(); |
| })(); |
| |
| // not optimized: |
| (function() { |
| var b = {a:'A', b:'B' }; |
| with ({}) { |
| (function () { |
| assertEq("abc".replace(/a|b/g, function(a) { return b[a] }), 'ABc'); |
| })(); |
| } |
| })(); |
| (function() { |
| var b = {a:'A', b:'B' }; |
| var bad = function() { b = {a:1, b:2}; return 'X' } |
| Object.defineProperty(b, 'x', {get:bad}); |
| assertEq("xabc".replace(/x|a|b/g, function(a) { return b[a] }), 'X12c'); |
| })(); |