Tracking and targeting one of multiple objects

So here’s what I have set up currently:

There are three objects, A B and C, all on a plane. Object A will move about the level if you click a location, much like a dungeon crawler or a MOBA, Object B remains in place unless moved in the Editor, and Object C will move towards objects A and B if they are within a radius of 10.

The script I have set up puts all of the enemies in an array based on their tag and then uses that to calculate the distance of each one in the Update function/method (currently using Javascript, wishing I was using C#, too lazy to change now). If it finds something within its radius, it sets that object as the closest available, sets the bool targetFound to true, and then defines the target variable as whatever the closest is for later use.

Here’s my problem:

I want the object to function much like the minions of League of Legends, where they will track object A so long as it is present in their line of sight, and then move on to another, namely B, if A leaves the stage. I just don’t know how to set this up in the least. Furthermore, my current code only returns null.

Here’s my code:

#pragma strict

var target;
var targetFound = false;

function Update() {
	Debug.Log(FindClosestEnemy());
	// if(FindClosestEnemy() != null && targetFound == true) {
	// 	transform.position = Vector3.MoveTowards(transform.position, FindClosestEnemy().transform.position, 3 * Time.deltaTime);
	// }
}

// Find the closest available enemy
function FindClosestEnemy () : GameObject {
	var gos : GameObject[];
	gos = GameObject.FindGameObjectsWithTag("Champion");
	
	var closest : GameObject = null;
	var los : float = 50;
	var position = transform.position;
	
	// Check every instance of the array of enemy characters
	for(var go : GameObject in gos) {
		// Calculate difference in distance between the objects
		var diff = (go.transform.position - position);
		// Equate the actual current distance
		var curDistance = diff.sqrMagnitude;
		// Check if the current distance is less than the line of sight
		if (curDistance < los) {
			// Check if we're already targeting something else
			if(targetFound != false) {
				// Enemy must be nearby
				closest = go;
				// We are now targeting that enemy
				targetFound = true;
				// Declare the target
				target = closest;
				// We're kinda done here
				return target;
			// Otherwise, we must already have a target
			} else {
				return target;
			}
		}
	}
}

I figured it out. I had to set the variable closest on start because it was being reset every frame. This is the code:

#pragma strict

var closest : GameObject;

function Start() {
	closest = null;
}

function Update() {
	FindClosestEnemy();
}

// Find the closest available enemy
function FindClosestEnemy () : GameObject {
	var los : float = 50;
	var enemies : GameObject[] = GameObject.FindGameObjectsWithTag("Deity");
	var position : Vector3 = transform.position;
	
	for(var enemy : GameObject in enemies) {
		var diff = (enemy.transform.position - position);
		var curDistance = diff.sqrMagnitude;
		if (curDistance < los) {
			if(closest == null) {
				closest = enemy;
				Debug.Log(closest);
			} else {
				Debug.Log("Already found something to target.");
			}
		} else {
			closest = null;
		}
	}
}