boolean never returns false

Hello everybody, in my AI code i want my NPC to, for instance, turn right if there is an obstacle left of him. I detect this by raycast and set a boolean to true so that it moves if obstacleleftofyou == true. However, this never returns to its false state in my code, even though i think i make it set to false whenever !obstacleleftofyou. Can anybody see what i did wrong here?

//if obstacle is left of you, known by raycast, turn right.
if (obstacleleftofyou == true){transform.Rotate(Vector3(0,1,0) * rotationSpeed * Time.deltaTime);
myTransform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);}
///
var distance = Vector3.Distance(target.position, myTransform.position);
if (distance < range && obstacleleftofyou == false){

transform.LookAt(Vector3(target.position.x, transform.position.y, target.position.z));

myTransform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);}

if (Input.GetKeyDown ("escape")){
Screen.lockCursor = false; // unfreeze mouse on pressing escape
    }
var rightray = new Ray  (transform.position, transform.right); // shoots ray right even though it says left
var hitright : RaycastHit; // hit information

if(Physics.Raycast (rightray, hitright, obstacleavoidancerangeside)){if (hitright.transform.tag == "metal"){obstaclerightofyou = true;{AvoidObstacleRight();}} // If raycast hits something within o avoid obstacle
else obstaclerightofyou = false; } 
var forwray = new Ray (transform.position, transform.forward); //Shoots ray in front of object
            var hitforw : RaycastHit; // hit information
           if (Physics.Raycast (forwray, hitforw, obstacleavoidancerangeforward)){ if (hitforw.transform.tag == "metal"){obstacleinfrontofyou = true;{AvoidObstacleForward();}} // If raycast hits something within o avoid obstacle
           else obstacleinfrontofyou = false;
           }
           
var leftray = new Ray (transform.position, -transform.right); //shoots ray left even though it says right
            var hitleft : RaycastHit; // hit information
           if (Physics.Raycast (leftray, hitleft, obstacleavoidancerangeside)){ if (hitleft.transform.tag == "metal"){obstacleleftofyou = true;{AvoidObstacleLeft();}} // If raycast hits something within o avoid obstacle
           else obstacleleftofyou = false;
           }
           }
           
function AvoidObstacleRight (){
Debug.Log("obstacleright");
}

function AvoidObstacleLeft(){
Debug.Log("obstacle left");
//yield WaitForSeconds(0.5);{obstacleleftofyou = false;}}
}

function AvoidObstacleForward (){
Debug.Log("obstacle in front");
}

It seems you are having some trouble with curly braces. Indenting your code gives this:

var forwray = new Ray (transform.position, transform.forward); 
var hitforw : RaycastHit; 
if (Physics.Raycast (forwray, hitforw, obstacleavoidancerangeforward))
{ 
	if (hitforw.transform.tag == "metal")
	{
		obstacleinfrontofyou = true;
		{
			AvoidObstacleForward();
		}
	} 
	else 
		obstacleinfrontofyou = false;
}
 
var leftray = new Ray (transform.position, -transform.right); 
var hitleft : RaycastHit; 
if (Physics.Raycast (leftray, hitleft, obstacleavoidancerangeside))
{ 
	if (hitleft.transform.tag == "metal")
	{
		obstacleleftofyou = true;
		{
			AvoidObstacleLeft();
		}
	 else obstacleleftofyou = false;
}

it shows first you have AvoidObstacleLeft/Right within a block which in this case is no use.

Second it shows the setting to false is inside the Raycast which in turn, if you have no raycast hit then the setting to false is not happening.