(I'm using AppleScript under Panther 10.3.8, if it is relevant.)
I've experimented some more with this problem, and it looks even
weirder than I realized. In particular, it the scripts don't have to be
nested to produce strange behavior. Here's an alternative version of
the program:
property theState : 0
global theScript
script Inner
on showTheState()
display dialog "State " & theState
end showTheState
end script
script Outer
on initialize()
set theScript to Inner
end initialize
end script
set x to Outer
set theState to 1
tell Outer to initialize()
tell theScript to showTheState()
set theState to 2
tell theScript to showTheState()
This will display "State 0" twice. If you change theState from a
property to a global, it will display "State 1" and "State 2" as
expected. If you leave theState as a property, and comment out the
apparently irrelevant line "set x to Outer", it will now print "State
1" twice!