Reusing variables or strings in Functions inside Functions

I am writing a function where I call other functions from within the main function. I am not using static/structures and I don't have global variables or strings. I am wondering if it is safe to reuse local variables or strings in the other functions? I should know the answer to this but I'm not 100% sure.

In my limited testing it seems OK for example to have a loop using variable i and to call another function within that loop that also uses i. The two variable are treated independently by Igor. Is this correct?
Your observations are correct!

All local variables, strings, structs (objects) which are not passed-by-reference to other functions can only be accessed/changed in that function. Global objects (global variables/strings, non-free waves, non-free datafolders) are surviving the end of a function run (they are "persistent").


Function MyFuncLocal()
	variable counter
	string str

	counter = NaN
	str     = "Hi there"

	AnotherFuncLocal()
End

Function AnotherFuncLocal()

	variable counter
	string str

	print counter
	print strlen(str)

End

Function FuncWithGlobalObjects()

	variable/G counter

	counter = 4711
	
	AnotherFuncWithGlobalObjects()
End

Function AnotherFuncWithGlobalObjects()

	NVAR counter
	print counter
End

Function MyFuncLocalPassByRef()
	variable counter
	string str

	counter = NaN
	str     = "Hi there"

	print counter
	AnotherFuncLocalPassByRef(counter)
	print counter
End

Function AnotherFuncLocalPassByRef(counter)
	variable &counter

	counter = 0
End



•MyFuncLocal()
  0
  NaN
•FuncWithGlobalObjects()
  4711
•MyFuncLocalPassByRef()
  NaN
  0