It describes the script compilation order. I'm linking it above for others which may encounter this answer from search terms which match the question.
In summary:
Whichever script has the function or variable that you want to access, that is the script which must go in the earlier compilation pass. So, if it's the c# script which contains the function you want to call, and the Javascript class is trying to call it, you'd move the C# file into an earlier-pass folder (such as "Plugins").
If the Javascript class contains the function or variable, and you want to call it from a C# script, it's the Javascript script which must go in an earlier-pass folder.
Note that this is a one-or-the-other situation. You can't have references both ways between two scripts of a different language.
Make sure your scripts aren't both in different folders which fall into the same compilation pass. Eg, both "Plugins" and "Standard Assets" are compiled in the same pass.
If you have your scripts arranged in the correct compilation order, and you're not trying to make "both-way" references, then the only other option I can think of is that you might have a typo either in your script filename, or in your references to that script type in your other script.
If you find you need C# for certain programmatic problems, the 'both-way' reference problem is a great reason to switch entirely to C#.
We made it for about a year with Unity before this really bit us, but eventually we took a day and ported all the old javascript code to C#. That was about 2 years ago - and we've never looked back. In the end it made working in Unity a lot simpler, particularly to avoid this sort of issue.
I'm trying to do this and i have placed the desired JS in the Standard Assets folder. The script that is accessing it is in the My Scripts folder which is not inside any folders. Somehow upon build i still get the error that says.
"The type or namespace name
'PlatformerController' could
not be found (are you mising a using
directive or an assembly reference?)"