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?
thomas_braun
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