These answers are good but they're not correct.
pragma solidity 4.24;
contract my contract {
function example() public view returns (address) {
return this;
}
}
What do you get? You get an address. The address of the contract.
It is NOT a state dependent variable or a use case of scope like in javascript, where you can use this to pull the global state into a callback.
It is NOT just an address, it can be viewed as a class variable which gives access to everything the contract has access to, think of it like a key but honestly I only use it to reference to it's own address.
For future reference, wrap it as such,
address(this)
To properly utilize.