You can use the function object in two ways: as a generator of level/time pairs for line~ and curve~, and as a transfer function calculator. The first mode requires two messages: bang and next. The bang message produces a series of level/time pairs that represent all of the points up to the first sustain point. Subsequent sections of the envelope need to be accessed by sending the next message. This is appropriate for creating musically-useful modulation envelopes for amplitude, filtering and pitch.
The other way to use it is as a transfer function. In this mode of operation, you treat the function object as an X/Y graph space, where the X dimension is an arbitrarily large value (1000 by default), and the Y value is between 0.0 and 1.0. If you feed the function a numeric value, it is considered the X value, and subsequently outputs the Y value at that location. The result is the equivalent of the values that are displayed when you hover your mouse over the function object interface.
The function object has two curvature modes: "linear" and "curve". When in the linear mode, the output will output value pairs that represent the time and target value for each of the points in the function display. Typically, this output is sent to a line~ object, which can be used to drive almost any object at audio rate.
When in curve mode - either set in the inspector or using the mode message - the function object produces output consistent with the values required by the curve~ object - value triplets that include delta time, target value and curve value. The curve value ranges from -1.0 through 1.0, with positive values producing a logarithmic curve, and negative values producing an exponential curve:
When function is in curve mode, you can directly change the curvature of any line segment by option-clicking on the segment, then dragging vertically.
(To learn more about logarithmic and exponential curves, you can check out this site.)