The difference is that, by definition, an attribute is of type String. Always. In your case, attrs.title will be literally string equal to what you pass into the attribute in HTML.
However, scope.title parsed and the result of the attr.title attribute is attr.title .
Ex. If you use something like this in HTML
<some-directive title="name"></some-directive>
where $scope.name = "Thomas Mann" defined in scope, then attr.title will contain the string "name" and scope.title will be "Thomas Mann" .
source share