Test caller and arguments properties in function in non strict mode On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". PASS Object.getOwnPropertyNames(function () {}).length is 3 PASS Object.getOwnPropertyNames(function () {}).includes("caller") is false PASS Object.getOwnPropertyNames(function () {}).includes("arguments") is false PASS (function(){}).hasOwnProperty("caller") is false PASS (function(){}).__proto__.hasOwnProperty("caller") is true PASS (function(){}).hasOwnProperty("arguments") is false PASS (function(){}).__proto__.hasOwnProperty("arguments") is true PASS typeof Object.getOwnPropertyDescriptor(foo, "arguments") is "undefined" PASS typeof Object.getOwnPropertyDescriptor(foo, "caller") is "undefined" PASS foo.caller is null PASS foo.arguments is null PASS foo.caller is null PASS foo.arguments is null PASS boo("abc")[0] is "abc" PASS boo("expected-value")[0] is "expected-value" PASS g(f) is g PASS doSetCaller(value, false) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.. PASS doSetCaller(value, true).__proto__.caller is value PASS doSetArguments(value, false) threw exception TypeError: 'arguments', 'callee', and 'caller' cannot be accessed in this context.. PASS doSetArguments(value, true).__proto__.arguments is value PASS successfullyParsed is true TEST COMPLETE