fieldhoist4.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. function fieldhoist1()
  6. {
  7. var object = {};
  8. var sum = 0;
  9. for (var i = 0; i < 3; i++)
  10. {
  11. sum += object.sum; // hoisted field load
  12. Object.defineProperty(object, "sum", { get: function() { WScript.Echo("sum" ); }, configurable: true });
  13. sum += object.sum; // implicit call bailout
  14. }
  15. }
  16. function fieldhoist2()
  17. {
  18. var object = {};
  19. var sum = 0;
  20. for (var i = 0; i < 3; i++)
  21. {
  22. sum += object.sum; // hoisted field load
  23. Object.defineProperty(object, "x", { get: function() { WScript.Echo("x"); }, configurable: true }); // kill all fields
  24. sum += object.sum; // reload, no bailout
  25. }
  26. }
  27. function fieldhoist3(name)
  28. {
  29. var object = { sum: 1};
  30. Object.defineProperty(object, name, { set: function(val) { WScript.Echo(val); }, configurable: true });
  31. var sum = 0;
  32. for (var i = 0; i < 3; i++)
  33. {
  34. sum += object.sum; // hoisted field load
  35. object[name] = object.sum; // kill all fields
  36. sum += object.sum; // reload, no bailout
  37. }
  38. }
  39. function main()
  40. {
  41. fieldhoist1();
  42. fieldhoist2();
  43. fieldhoist3("x");
  44. }
  45. main();