# forIn > Invoke a function for each own and inherited enumerable property of an object.
## Usage ```javascript var forIn = require( '@stdlib/utils/for-in' ); ``` #### forIn( obj, fcn\[, thisArg ] ) Invokes a `function` for each own and inherited enumerable property of an `object`. ```javascript function log( value, key ) { console.log( '%s: %d', key, value ); } function Foo() { this.a = 1; this.b = 2; return this; } Foo.prototype.c = 3; Foo.prototype.d = 4; var obj = new Foo(); forIn( 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 }; forIn( 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 }; forIn( obj, sum, context ); var mean = context.sum / context.count; // returns 2.5 ```
## Notes - The function returns the input `object`. - Property iteration order is **not** guaranteed.
## Examples ```javascript var fromCodePoint = require( '@stdlib/string/from-code-point' ); var forIn = require( '@stdlib/utils/for-in' ); function update( value, key, obj ) { console.log( '%s: %d', key, value ); obj[ key ] *= value; } function Foo() { return this; } Foo.prototype.beep = 3.14; var obj; var key; var i; obj = new Foo(); for ( i = 0; i < 26; i++ ) { key = fromCodePoint( 97 + i ); obj[ key ] = i; } forIn( obj, update ); console.log( obj ); ```