- JavaScript Function Parameters
- Function Parameters and Arguments
- Parameter Rules
- Default Parameters
- Example
- Default Parameter Values
- Example
- Function Rest Parameter
- Example
- The Arguments Object
- Example
- Example
- Arguments are Passed by Value
- Objects are Passed by Reference
- Javascript define type of param in function js
- Function parameter type in JavaScript
- How do I know the type of a function parameter in javascript
- Define a Typescript type for a function with none or many different parameter types
- Update based on comments
- @param
- Examples
- Names, types, and descriptions
- Parameters with properties
- Optional parameters and default values
- Multiple types and repeatable parameters
- Callback functions
- Related Links
JavaScript Function Parameters
A JavaScript function does not perform any checking on parameter values (arguments).
Function Parameters and Arguments
Earlier in this tutorial, you learned that functions can have parameters:
Function parameters are the names listed in the function definition.
Function arguments are the real values passed to (and received by) the function.
Parameter Rules
JavaScript function definitions do not specify data types for parameters.
JavaScript functions do not perform type checking on the passed arguments.
JavaScript functions do not check the number of arguments received.
Default Parameters
If a function is called with missing arguments (less than declared), the missing values are set to undefined .
Sometimes this is acceptable, but sometimes it is better to assign a default value to the parameter:
Example
Default Parameter Values
ES6 allows function parameters to have default values.
Example
If y is not passed or undefined, then y = 10.
Function Rest Parameter
The rest parameter (. ) allows a function to treat an indefinite number of arguments as an array:
Example
function sum(. args) <
let sum = 0;
for (let arg of args) sum += arg;
return sum;
>
let x = sum(4, 9, 16, 25, 29, 100, 66, 77);
The Arguments Object
JavaScript functions have a built-in object called the arguments object.
The argument object contains an array of the arguments used when the function was called (invoked).
This way you can simply use a function to find (for instance) the highest value in a list of numbers:
Example
x = findMax(1, 123, 500, 115, 44, 88);
function findMax() let max = -Infinity;
for (let i = 0; i < arguments.length; i++) if (arguments[i] > max) max = arguments[i];
>
>
return max;
>
Or create a function to sum all input values:
Example
x = sumAll(1, 123, 500, 115, 44, 88);
function sumAll() let sum = 0;
for (let i = 0; i < arguments.length; i++) sum += arguments[i];
>
return sum;
>
If a function is called with too many arguments (more than declared), these arguments can be reached using the arguments object.
Arguments are Passed by Value
The parameters, in a function call, are the function’s arguments.
JavaScript arguments are passed by value: The function only gets to know the values, not the argument’s locations.
If a function changes an argument’s value, it does not change the parameter’s original value.
Changes to arguments are not visible (reflected) outside the function.
Objects are Passed by Reference
In JavaScript, object references are values.
Because of this, objects will behave like they are passed by reference:
If a function changes an object property, it changes the original value.
Changes to object properties are visible (reflected) outside the function.
Javascript define type of param in function js
beacuse of it there are no types, you can actively check if the given parameter is array by .isArray() and .isInteger(), this both methods will return the booleen. the answer given by pravat work but it can be devasting as they will not only set the type its will set its default value, in case if you didn’t send the value of num then function will asume its 10 and start to work, which can be pain in debuging if you need strict type please look into typescript. It does not enforce types for function parameters.
Function parameter type in JavaScript
if you want to enforce an specific data type you need to explicitly write that
/** * looks for an specific item of the list. * * @param > data Array to search from. * @param num Number of where to find bla bla. * @throws in case data or num do not have the expected type * @returns item found. */ export function search(data, num) < if (!Array.isArray(data)) < throw new TypeError("data should be an array"); >if (typeof num !== "number") < throw new TypeError("num should be a number"); >return data[num]; >
javascript is a loosely typed language, there’s no way to say declaratively that arr should be an array and num should be a number other than documentation (for instance, JSDoc). That would look like this:
/** * Searches (insert fuller description here). * * @param arr The array to search through. * @param num The number to (use? search for?) * @returns (you can use the same to say what the return type is) */ function search(arr, num) < if (!Array.isArray(arr)) < throw new Error(`'arr' argument must be an array`); >if (typeof num !== "number"/* Or use `Number.isInteger(num)` for an integer check [it includes the typecheck]*/) < throw new Error(`'num' argument must be a number`); >// . do the work. >
You could check at runtime. That would look something like this:
function search(arr, num) < if (!Array.isArray(arr)) < throw new Error(`'arr' argument must be an array`); >if (typeof num !== "number"/* && perhaps a check for int if that part is really important*/) < throw new Error(`'num' argument must be a number`); >// . do the work. >
There’s a language built on top of JavaScript called TypeScript, which adds a static type system. It’s then compiled to JavaScript for use with the browser, Node.js, etc. You may want to look into using that, if static typing is important for what you’re doing.
In TypeScript, you’d do it like this (if you want the array to be an array of numbers):
function search(arr: number[], num: number) < // . >
That doesn’t require an integer , all JavaScript numbers are IEEE-754 floating point or BigInt s.
javascript is a loosely type language. beacuse of it there are no types, you can actively check if the given parameter is array by .isArray() and .isInteger(), this both methods will return the booleen.
the answer given by pravat work but it can be devasting as they will not only set the type its will set its default value, in case if you didn’t send the value of num then function will asume its 10 and start to work, which can be pain in debuging if you need strict type please look into typescript.
Understanding Default Parameters in JavaScript, In ECMAScript 2015, default function parameters were introduced to the JavaScript language. These allow developers to initialize a function with
How do I know the type of a function parameter in javascript
JavaScript is a dynamically typed language. It does not enforce types for function parameters.
If you want to know what values a function expects to be passed to it you have two basic options:
Can I Specify Parameter Type as One of Many Types Instead of Any, function myFunc(param: string[] | boolean[] | number[]): void;. Using other type than the ones specified will trigger a compile-time error. If you want an array
Define a Typescript type for a function with none or many different parameter types
That’s what you tell the compiler:
type tDefaultVoidFunction = (. params: (number | object | string)[]) => void;
The callback must accept any number of parameters where each parameter must accept number | object | string.
Let’s have a look at your function.
const example: tDefaultVoidFunction = (id: string): void <>
The parameter accepts only strings and so the compiler will tell you that’s wrong. (number and object missing)
You can define multiple allowed signatures by using union types:
type tDefaultVoidFunction = ((id: string) => void) | (() => void) | ((a: string, b: number, c: object) => void) | ((clazz: SomeClass) => void);
- private function bindMe(id: string):void <> is no valid TypeScript code inside of classes, I guess it’s just a typo.
- Docs: https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html
Update based on comments
AwesomeFunctions.addClickCallback(document.getElementById('. '), this.bindMeToo, this);
document.getElementById('. ')?.addEventListener('click', (e) => this.bindMeTo()); // ignoring that we do not provide valid parameters in both cases
Function parameter type in JavaScript, This function takes an Array and an Integer as the input. But I want the parameters to be of their respective types, is there any way I can set
@param
The @param tag provides the name, type, and description of a function parameter.
The @param tag requires you to specify the name of the parameter you are documenting. You can also include the parameter’s type, enclosed in curly brackets, and a description of the parameter.
The parameter type can be a built-in JavaScript type, such as string or Object , or a JSDoc namepath to another symbol in your code. If you have written documentation for the symbol at that namepath, JSDoc will automatically link to the documentation for that symbol. You can also use a type expression to indicate, for example, that a parameter is not nullable or can accept any type; see the @type tag documentation for details.
If you provide a description, you can make the JSDoc comment more readable by inserting a hyphen before the description. Be sure to include a space before and after the hyphen.
Examples
Names, types, and descriptions
The following examples show how to include names, types, and descriptions in a @param tag.
/** * @param somebody */ function sayHello(somebody)
/** * @param somebody */ function sayHello(somebody)
/** * @param somebody Somebody's name. */ function sayHello(somebody)
You can add a hyphen before the description to make it more readable. Be sure to include a space before and after the hyphen.
Name, type, and description, with a hyphen before the description
/** * @param somebody - Somebody's name. */ function sayHello(somebody)
Parameters with properties
If a parameter is expected to have a specific property, you can document that property by providing an additional @param tag. For example, if an employee parameter is expected to have name and department properties, you can document it as follows:
Documenting a parameter’s properties
/** * Assign the project to an employee. * @param employee - The employee who is responsible for the project. * @param employee.name - The name of the employee. * @param employee.department - The employee's department. */ Project.prototype.assign = function(employee) < // . >;
If a parameter is destructured without an explicit name, you can give the object an appropriate one and document its properties.
Documenting a destructuring parameter
/** * Assign the project to an employee. * @param employee - The employee who is responsible for the project. * @param employee.name - The name of the employee. * @param employee.department - The employee's department. */ Project.prototype.assign = function(< name, department >) < // . >;
You can also combine this syntax with JSDoc’s syntax for array parameters. For example, if multiple employees can be assigned to a project:
Documenting properties of values in an array
/** * Assign the project to a list of employees. * @param
Optional parameters and default values
The following examples show how to indicate that a parameter is optional and has a default value.
An optional parameter (using JSDoc syntax)
/** * @param [somebody] - Somebody's name. */ function sayHello(somebody) < if (!somebody) < somebody = 'John Doe'; >alert('Hello ' + somebody); >
/** * @param somebody - Somebody's name. */ function sayHello(somebody) < if (!somebody) < somebody = 'John Doe'; >alert('Hello ' + somebody); >
/** * @param [somebody=John Doe] - Somebody's name. */ function sayHello(somebody) < if (!somebody) < somebody = 'John Doe'; >alert('Hello ' + somebody); >
Multiple types and repeatable parameters
The following examples show how to use type expressions to indicate that a parameter can accept multiple types (or any type), and that a parameter can be provided more than once. See the @type tag documentation for details about the type expressions that JSDoc supports.
Allows one type OR another type (type union)
/** * @param <(string|string[])>[somebody=John Doe] - Somebody's name, or an array of names. */ function sayHello(somebody) < if (!somebody) < somebody = 'John Doe'; >else if (Array.isArray(somebody)) < somebody = somebody.join(', '); >alert('Hello ' + somebody); >
/** * @param somebody - Whatever you want. */ function sayHello(somebody)
/** * Returns the sum of all numbers passed to the function. * @param num - A positive or negative number. */ function sum(num) < var i = 0, n = arguments.length, t = 0; for (; i < n; i++) < t += arguments[i]; >return t; >
Callback functions
If a parameter accepts a callback function, you can use the @callback tag to define a callback type, then include the callback type in the @param tag.
Parameters that accept a callback
/** * This callback type is called `requestCallback` and is displayed as a global symbol. * * @callback requestCallback * @param responseCode * @param responseMessage */ /** * Does something asynchronously and executes the callback on completion. * @param cb - The callback that handles the response. */ function doSomethingAsynchronously(cb) < // code >;