Context of variables – Why $fileName is undefind?

I have this function that parse file to bytes:
thae function can uplaod multiple files.

pniotApp.directive('onReadFile', function ($parse) {
    return {
        restrict: 'A',
        scope: false,
        link:function (scope, element, attrs) {
            var fn = $parse(attrs.onReadFile);

            element.on('change',function (onChangeEvent) {

                var files = (onChangeEvent.srcElement || onChangeEvent.target).files;
                for (j = 0; j < files.length; j++) {
                    readerEngine(files[j]);
                }

                function readerEngine(file_) {
                  
                    var reader = new FileReader();
                    reader.onload = function (onLoadEvent) {
                        var buffer = onLoadEvent.target.result;
                        var uint8 = new Uint8Array(buffer);
                        var result = [];
                        for (var i = 0; i < uint8.length; i++) {
                            result.push(uint8[i]);
                        }
                        
                        scope.$apply(function () {
                            fn(scope, {
                                $fileContent: result,
                                $fileName: file_.name
                            });
                        });
                    };

                    reader.readAsArrayBuffer(file_);
                }
            });
        }
    };
});

in another function i want to use with:$fileContent,$fileName:

But $fileName is undefind ($fileContent contain good data) why?