# 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 );
```