No. All identifiers and variables are evaluated immediately by a timer. That means that in your example, if mydialog is open
**at the time the timer is activated**, then it will trigger the true response (the echo) every time the timer triggers. Even if you close the dialog while the timer is running, it will always return the true response because it was true when the timer was activated.
If you want that it to check the status of the dialog every time it triggers, then you need to use $! instead. That tells the identifier to be evaluated each time the timer triggers. In the example I gave you, $time() never changed, but $!time() did change. That was why I said it was an easy example to show the difference. It's clear that the first one only evaluated the time when the timer was created and never again, while the second one evaluated it every time the timer triggered.
Typically if you're checking something on a timer, you want it to be evaluated when the timer triggers, so you usually want to use $! to make it evaluate every time. Of course, there are situations where you only want it to trigger initially. It depends on what you need it to do.
In either case, my comment on how you're using $iif() is still valid. If the dialog is closed, you will get an error message about the timer not having sufficient parameters. That's rarely a good way to set up a script. If you do not want anything to happen if the dialog is closed, then you should have the false part of $iif() be something like RETURN or NOOP. That lets you have a valid false option while still not doing anything. Note that depending on how and where that is in your script and what you want the script to do or not do, NOOP may be the better option as RETURN will stop the remainder of the script from running. Or, if you do want everything after it to be stopped if false, then RETURN would be the better option. In either case, you really should put a false option there because /timer requires that parameter.
If you were just doing something like:
echo -a Testing $iif(%var == 1,this)
Then that doesn't need a false because the echo will still work since "Testing" is going to be echoed anyhow. If you had:
echo -a $iif(%var == 1,Testing)
Then that would need a false option just like /timer because /echo requires somethign to echo. Because this one doesn't have something that is guaranteed to echo, the $iif() needs to provide something no matter what (true or false).