✓ Accepted answer
BindableFunctions are objects that have methods you can use to do communication between two scripts, or two localscripts.
For example, say you have an Admin Script, and a Cleanup Script. You want your admin script to tell your Cleanup script to remove everything in the Workspace.
You would create a BindableFunction in ServerStorage named "DoCleanup"
In the Cleanup Script:
local DoCleanup = Instance.new("BindableFunction")
DoCleanup.Name = "DoCleanup"
DoCleanup.Parent = game.ServerStorage
DoCleanup.OnInvoke = function()
print("A script told me to clean up")
game.Workspace:ClearAllChildren()
end
In the Admin Script:
local DoCleanup= game.ServerStorage:WaitForChild("DoCleanup")
wait(10)
DoCleanup:Invoke()
Often with BindableFunctions you would pass in parameters and get a return value. For the sake of simplicity I left that out. For example, a use case could be that you have a PointsSystem script that manages all points, and you want to get the number of points of a particular player from a script that's in a model in Workspace. You would create a BindableFunction and call it with the player as the first argument, and the PointsSystem script would return the number of points to you.
Basically, they're useful if you have complicated systems set up with multiple server side scripts needing to communicate with each other.
You can find more information on the wiki:
http://wiki.roblox.com/index.php?title=BindableFunction