They both are to tell what is allowed to be mass assignable, and what isn't, but in opposite ways.
$fillable = properties that can be mass assignable. Anything not in the array cannot be mass assigned. $guarded = properties that cannot be mass assignable, allowing all others through.
The manual says to use one or the other, but not both.
So if your db table had the following fields:
name, age and location
And you only wanted name and age to be mass assignable, you could use
$fillable = ['name', 'age']; // name and age can be mass assignable, but location can't be
// or
$guarded = ['location']; //location can't be mass assignable, but name and age can
While $fillable serves as a "white list" of attributes that should be mass assignable, you may also choose to use $guarded. The $guarded property should contain an array of attributes that you do not want to be mass assignable. All other attributes not in the array will be mass assignable. So, $guarded functions like a "black list". Of course, you should use either $fillable or $guarded - not both.