For example, if f(x)=x^2+3x+5 and D=diag[2,3], then you can check that f(D)=D^2+3D+5I=diag[4,9]+diag[6,9]+diag[5,5]=diag[15,23]=diag[f(2),f(3)] (note that "3D" is the scalar 3 times the matrix D and that "5" is interpreted as 5I, where I is the 2 times 2 identity matrix diag[1,1]).
If f is not a polynomial, then often we can still say that f(D)=diag[f(d_1),f(d_2),...,f(d_n)]. For example, if f(x)=e^(x), we can say that f(D)=diag[e^(d_1),e^(d_2),...,e^(d_n)]. This can either be thought of as a definition, or we can use the so-called "Taylor series" for f(x)=e^(x) centered at x=0, which is f(x)=1+x+x^2/(2!)+x^3/(3!)+cdots, to define f(D) to be I+D+D^2/(2!)+D^3/(3!)+cdots. However, in this situation, we would have to address possible "convergence issues" (i.e., what does such an infinite sum mean?).
If f happens to be undefined at any of the values d_1,d_2,...,d_n, then certainly f(D) would be undefined.
You might wonder in all this: why does D have to be a diagonal matrix? The answer is that defining f(D) to be a matrix obtained by applying f to all the entries of D is not typically consistent with the operations that define f along with the corresponding matrix operations. Even with a polynomial example, such as f(x)=x^2+3x+5 above, we would not typically get the matrix D^2+3D+5I, if D is not diagonal, by applying f to all the entries of D individually.
Actually, you could also say that such an approach is even a problem when D is a diagonal matrix because the value of f at the other (zero) entries, f(0), may be nonzero.