[removed] access variables inside anonymous function from the outside

前端 未结 5 775
生来不讨喜
生来不讨喜 2020-12-06 16:17

Say I have this anonymous function:

(function(window){

 var private = \'private msg\';

 function sayit() {
   alert(private) // works
 }

 document.body.on         


        
相关标签:
5条回答
  • 2020-12-06 16:36

    You would have to do something like this:

    var Test = (function(window){
     var private = 'private msg';
     var api = {};
    
     function sayit(){
       alert(private) // works
     }
     document.body.onclick = sayit; // works
    
    api.sayit = sayit;
    return api;
    })(window);
    
    Test.sayit(); //this would alert 'private msg'
    
    0 讨论(0)
  • 2020-12-06 16:40

    That's the whole point of having scope and private variables

    Either

    Set the private value to a global variable?

    or

    declare the variable outside

    0 讨论(0)
  • 2020-12-06 16:42

    Yes, this is how Javascript lets you have 'private' variables (hidden in a function scope).

    No, there's no hack available to access variables such as private without re-writing the code.

    Variables defined with var within a function can be accessed only from within that function.

    0 讨论(0)
  • 2020-12-06 16:54

    Ok. I got it.

    (function(window){
        var alert_original = window.alert;
        window.alert = function(data) {
            window.extracted = data;
            alert_original(data);
        };
    })(window);
    
    (function(window){
        var private = 'private msg';
        function sayit() {
        alert(private) // works
     }
     document.body.onclick = sayit; // works
    })(window);
    

    After you click body, you can get 'private msg' from extracted

    0 讨论(0)
  • 2020-12-06 16:55

    They aren't intended as "private" variables; that's just how closures work. You can do the same thing in Perl and Python, at the very least, and probably a great many other languages with closures and lexical scoping.

    Debuggers like Firebug or Chrome Inspector can still show you the entire stack at any point (including closed-over variables), but other than that and without changing the original code, I think you're out of luck.

    Perhaps if you told us your actual problem... :)

    0 讨论(0)
提交回复
热议问题