# forOwn > Invoke a function for each own enumerable property of an object.
## Usage ```javascript var forOwn = require( '@stdlib/utils/for-own' ); ``` #### forOwn( obj, fcn\[, thisArg ] ) Invokes a `function` for each own enumerable property of an `object`. ```javascript function log( value, key ) { console.log( '%s: %d', key, value ); } var obj = { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }; forOwn( obj, log ); /* e.g., => a: 1 b: 2 c: 3 d: 4 */ ``` The invoked `function` is provided three arguments: - `value`: object property value - `key`: object property - `obj`: the input object To terminate iteration before visiting all properties, the provided function must explicitly return `false`. ```javascript function log( value, key ) { console.log( '%s: %d', key, value ); return false; } var obj = { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }; forOwn( obj, log ); // e.g., => a: 1 ``` To set the function execution context, provide a `thisArg`. ```javascript function sum( value ) { this.sum += value; this.count += 1; } var obj = { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }; var context = { 'sum': 0, 'count': 0 }; forOwn( obj, sum, context ); var mean = context.sum / context.count; // returns 2.5 ```
## Notes - The function returns the input `object`. - The function determines the list of own enumerable properties **before** invoking the provided function. Hence, any modifications made to the input `object` **after** calling this function (such as adding and removing properties) will **not** affect the list of visited properties. - Property iteration order is **not** guaranteed.
## Examples ```javascript var fromCodePoint = require( '@stdlib/string/from-code-point' ); var forOwn = require( '@stdlib/utils/for-own' ); function update( value, key, obj ) { console.log( '%s: %d', key, value ); obj[ key ] *= value; } var obj; var key; var i; obj = {}; for ( i = 0; i < 26; i++ ) { key = fromCodePoint( 97 + i ); obj[ key ] = i; } forOwn( obj, update ); console.log( obj ); ```