Description | Code | Result | Notes |
---|---|---|---|
ES3 | |||
Native |
Object |
Some browsers (e.g. Konqueror) have unique "[function]" representation | |
Built-in | window.alert |
||
Built-in #2 | window.focus |
Some browsers (e.g. Chrome) omit identifier of some of the built-in methods | |
User-defined |
function test (arg1, $foo, /* comment */ _BAR) { // inline comment /* some comment */ noOpStatement; nonexistentIdentifier(); alert(1 + 1); if (false) { return 123 } return $foo .something() / _BAR + /^reg\/ex$/gmi; somethingElse(); } |
Some browsers (e.g. FF<17) strip all comments and "dead" code ( Some browsers (e.g. Konqueror) insert newlines after parameters list and also "inline" code. |
|
User-defined NFE |
var leftHand = function rightHand() { return }; |
||
User-defined NFE w. comments around | /* foo bar */ (((function test(){}) /* baz qux */ )) |
Some browsers (e.g. IE<9) include comments AND spaces around function in its string representation | |
User-defined & generated |
new Function('x, y', '/* comment */ return x + y') |
Some browsers (e.g. Chrome) include extra comments /**/ and/or newlines next to parameters list
Some browsers (e.g. Konqueror) omit brackets surrounding function body |
|
Non-standard | |||
User-defined & with "name" |
var withName = function() { }; withName.name = 'someName'; |
||
Expression closures |
var expressionClosure = function(x, y) x + y |
Browsers that support expression closures (e.g. FF), represent them using bracketless notation | |
"use asm" |
function use_asm (x, y) { "use asm"; return x + y; } |
Some browsers (e.g. FF<17) strip "use asm" statement, likely considering it "dead code". | |
ES5 | |||
User-defined & bound |
function f (x, y, /* comment */ z) { return /* comment */ x + y; } var bound = f.bind({ }); |
Most (all?) of the browsers replace function code with "[native code]" when representing bound functions. Some browsers (e.g. WebKit) show original function identifier and some don't | |
"use strict" |
function use_strict (x, y) { "use strict"; return x + y; } |
Some browsers (e.g. FF<4) strip "use strict" statement, likely considering it "dead code". | |
ES6 | |||
Arrow functions |
var a = () => 5; |
Browsers that support arrow functions (e.g. FF24+), represent them using () => notation
|
|
Functions with rest params |
function withRestParams(...args) { return args; } |
Browsers that support rest params (e.g. FF24+), represent them using (...args) notation
|
|
Functions with default params |
function defaultParams(a = 1) { return a === 1; } |
Browsers that support default params (e.g. FF24+), represent them using arg = ... notation
|
|
Generators |
var generator = (function* () { yield 1; }); |
Browsers that support generators (e.g. FF24+), represent them using function* notation
|