Confused by Javascript's variable scope

前端 未结 2 664
臣服心动
臣服心动 2021-01-27 07:09

I\'m finding myself by Javascript\'s variable scope, could someone explain to me why the first example doesn\'t work but the second does?

function test() {
  ret         


        
相关标签:
2条回答
  • 2021-01-27 07:34

    In Javascript, functions define scope. In your first example the_variable is outside of the scope of test. On the other hand, in the second example, the_variable is defined in the global scope and is available everywhere.

    EDIT

    Catch the_variable in a closure if you want it to be available to test.

    var foo = (function () {
       var the_variable = "does work";
       function test() {
           return typeof(the_variable) !== 'undefined' && the_variable;
       }
       return {test : test};
    }()); 
    console.log(foo.test());
    

    Output:

    does work

    0 讨论(0)
  • 2021-01-27 07:38

    Explained in comments:

    function test() {
      return typeof(the_variable) !== 'undefined' && the_variable;
    }
    
    // The variable in this function is scoped to the anonymous function.
    // It doesn't exist outside that function, so `test` cannot see it
    (function () {
       var the_variable = "doesn't work";
       console.log(test());
    }());
    
    // This variable exists in a scope that wraps the `test` function, so it can see it.
    var the_variable = "does work";
    console.log(test());
    
    0 讨论(0)
提交回复
热议问题