title: Assumption: Is it true that Meteor.call() tries to run in the client environment first?
body: <p>Experimenting with Meteor due to <a href="https://stackoverflow.com/questions/20387665/how-can-i-access-server-side-variables-via-meteor-call">this question</a>, I came to the following conclusion:</p>
  
  <p>Defined in a shared directory (client/server), this will throw an <strong>Reference Error</strong>:</p>
  
  <pre><code>if(Meteor.isServer) {
      // could depend on server logic, this is not Meteor.isServer!
      serverVar = true;
  }    
  
  Meteor.methods({
      myMethod: function() {
          if(serverVar) {
              return "secret";
          } else {
              throw Error();
          }
      }
  }
  </code></pre>
  
  <p>Then, on the client:</p>
  
  <pre><code>Meteor.call("myMethod", function(err, res) {
      console.log(res);
  }
  </code></pre>
  
  <p>Leads to: <code>ReferenceError: serverVar</code></p>
  
  <p>But this code, being defined on the server side only, runs flawlessly:</p>
  
  <pre><code>// could depend on server logic, this is not Meteor.isServer!
  serverVar = true;
  
  Meteor.methods({
      myMethod: function() {
          if(serverVar) {
              return "secret";
          } else {
              throw Error();
          }
      }
  }
  </code></pre>
  
  <p>Note that I only switched to a server-side directory instead of a shared one and removed the if-clause.</p>
  
  <p>I thought that both approaches should be equivalent, ignoring the fact that code is visible 
  on the client when only limited by <code>Meteor.isServer</code>.</p>
  
  <p>This leads me to the conclusion that Meteor, using the first approach, tries to run code on the client when it is not explicitly limited to the server. Is that true?! What could be another explanation?</p>