(function(){echo("hasOwnProperty(caller): ", arguments.hasOwnProperty("caller"));})();
hasOwnProperty(caller): false

var foo = function(){};(function(){echo("hasOwnProperty(caller): ", foo.hasOwnProperty("caller"));})();
hasOwnProperty(caller): false

var foo = function(){};(function(){"use strict";echo("hasOwnProperty(caller): ", foo.hasOwnProperty("caller"));})();
hasOwnProperty(caller): false

(function(){echo("hasOwnProperty(callee): ", arguments.hasOwnProperty("callee"));})();
hasOwnProperty(callee): true

var foo = function(){};(function(){echo("hasOwnProperty(arguments): ", foo.hasOwnProperty("arguments"));})();
hasOwnProperty(arguments): false

var foo = function(){};(function(){"use strict";echo("hasOwnProperty(arguments): ", foo.hasOwnProperty("arguments"));})();
hasOwnProperty(arguments): false

(function(){arguments.caller;})();

var foo = function(){};(function(){foo.caller;})();

var foo = function(){};(function(){"use strict";foo.caller;})();

(function(){arguments.callee;})();

var foo = function(){};(function(){foo.arguments;})();

var foo = function(){};(function(){"use strict";foo.arguments;})();

(function(){arguments.caller = 0;})();

var foo = function(){};(function(){foo.caller = 0;})();

var foo = function(){};(function(){"use strict";foo.caller = 0;})();

(function(){arguments.callee = 0;})();

var foo = function(){};(function(){foo.arguments = 0;})();

var foo = function(){};(function(){"use strict";foo.arguments = 0;})();

(function(){Object.defineProperty(arguments, "caller", {value: 0});})();

var foo = function(){};(function(){Object.defineProperty(foo, "caller", {value: 0});})();

var foo = function(){};(function(){"use strict";Object.defineProperty(foo, "caller", {value: 0});})();

(function(){Object.defineProperty(arguments, "callee", {value: 0});})();

var foo = function(){};(function(){Object.defineProperty(foo, "arguments", {value: 0});})();

var foo = function(){};(function(){"use strict";Object.defineProperty(foo, "arguments", {value: 0});})();

(function(){var descriptor = Object.getOwnPropertyDescriptor(arguments, "caller");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: undefined is not an object (evaluating 'descriptor.hasOwnProperty')

var foo = function(){};(function(){var descriptor = Object.getOwnPropertyDescriptor(foo, "caller");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: undefined is not an object (evaluating 'descriptor.hasOwnProperty')

var foo = function(){};(function(){"use strict";var descriptor = Object.getOwnPropertyDescriptor(foo, "caller");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: undefined is not an object (evaluating 'descriptor.hasOwnProperty')

(function(){var descriptor = Object.getOwnPropertyDescriptor(arguments, "callee");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();

var foo = function(){};(function(){var descriptor = Object.getOwnPropertyDescriptor(foo, "arguments");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: undefined is not an object (evaluating 'descriptor.hasOwnProperty')

var foo = function(){};(function(){"use strict";var descriptor = Object.getOwnPropertyDescriptor(foo, "arguments");if(descriptor.hasOwnProperty("get")) safeCall(descriptor.get);if(descriptor.hasOwnProperty("set")) safeCall(descriptor.set);})();
TypeError: undefined is not an object (evaluating 'descriptor.hasOwnProperty')

