how would i cause the function to wait until it stops to function again?

I am trying to make a selecting script, but when i hold down mouse0 it cause the function to run continually, how would i cause it to only run once then wait till its done to run again?

this is what i have

var hit : RaycastHit;
var X = 0;
var Been = 0;
var hitName;
function Update () {
	var ray : Ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2,Screen.height/2,0));
	var Text = GetComponent(GUIText);
	if (Physics.Raycast(ray,hit, 2)) {
			if (Input.GetKey(KeyCode.Mouse0)) {
				Debug.Log("You hit " + hit.collider.gameObject.tag);
				hitName = GameObject.Find(hit.collider.gameObject.name);
				if (hit.collider.gameObject.tag == "Tree") {
					Text.text = "You hit tree!";
					hitName.GetComponent(tree).use();
				} else if (hit.collider.gameObject.tag == "Rock") {
					Text.text = "You hit rock!";
				} else if (hit.collider.gameObject.tag == "Ground") {
					Text.text = "You hit ground!";
				} else if (hit.collider.gameObject.tag == "Water") {
					Text.text = "You hit water!";
					hitName.GetComponent(water).use();
				}
			}
	}
	if (Physics.Raycast(ray,hit,50)) {
		
	}
}
function StartOffTimer(Var,vartime) {
	if (Been == 0) {
		if (Var == 0) {
			Var = vartime;
			Been = 1;
		}
	}
	if (Var > 0) {
		Var = Var - 1;
	}
	if (Been == 1) {
	}
}

Use GetKeyDown instead.

If you only want to see if they hit something when a key is hit, look for the key down first, then do the raycast, because raycasting is an ‘expensive’ operation. Don’t do them if you don’t have to.

Also, don’t use Var as the name of a var, it will get you confused and cause undue trouble.

Also, don’t call GetComponent if you don’t need to. And try to call them in Start functions, where you can save the reference in a variable for use in Update and OnGUI.