<!DOCTYPE html>
<html ng-app="plnkrApp">

  <head>
    <script data-require="angular.js@1.2.16" data-semver="1.2.16" src="https://code.angularjs.org/1.2.16/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <meta charset="UTF-8" />
    <script src="script.js"></script>
  </head>

  <body>
    <pre>
Tree of scopes: 
002 ($rootScope)
 └ 003 ($scope of ParentCtrl)
    └ 004 ($scope of ChildCtrl)
       └ 005 ($scope of GrandChildCtrl)
    </pre>
    
    <div ng-controller="ParentCtrl" style="border: 1px solid red">
      {{$id}}<br>
      
      <div ng-controller="ChildCtrl" style="border: 1px solid green">
        {{$id}}<br>
        
        <div ng-controller="GrandChildCtrl" style="border: 1px solid blue">
            {{$id}}<br>
            <button ng-click="emitEvent()">Emit !</button>
        </div>
        
        <pre ng-show="sync$id">
event.currentScope.$id is : {{sync$id}}
Few millis later, event.currentScope.$id is : {{async$id}}</pre>
      </div>
      
      <pre ng-show="sync$id">
event.currentScope.$id is : {{sync$id}}
Few millis later, event.currentScope.$id is : {{async$id}}</pre>
    </div>
    
  </body>

</html>

angular.module('plnkrApp', [])
  .controller('ParentCtrl', function($scope, $timeout) {
    $scope.$on('customEvent', function(event) {
      console.log(event.currentScope); // 003 the good one
      $scope.sync$id = event.currentScope.$id;
      $timeout(function() {
        console.log(event.currentScope) // 002 the $rootScope
        $scope.async$id = event.currentScope.$id;
      });
    })
  })
  .controller('ChildCtrl', function($scope, $timeout) {
    $scope.$on('customEvent', function(event) {
      console.log(event.currentScope); // 004 the good one
      $scope.sync$id = event.currentScope.$id;
      $timeout(function() {
        console.log(event.currentScope) // 002 the $rootScope
        $scope.async$id = event.currentScope.$id;
      });
    })
  })
  .controller('GrandChildCtrl', function($scope) {
    $scope.emitEvent = function() {
      $scope.$emit('customEvent');
    };
  });
/* Styles go here */

div, li {
  padding: 5px;
}