2013-03-15 4 views
1

В Javascript говорится, что функции выполняются с использованием области действия, которая была действительна при определении функции. Он не имеет ничего общего с областью действия, когда функция вызывается.Область выполнения функции Javascript

Что именно это означает? Не могли бы вы объяснить простые примеры.

+1

может эта ссылка поможет http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – rab

ответ

2

Выход Ниже приводится потому, что это fooопределяется в рамках function a, так что переменная data, что он использует тот, который также определен в объеме function a.

Он не выводит B, хотя функция была под названием в области function b, где data = "B".

<div id="output"></div> 
<script> 
    var data = "global"; 

    function a() { 
    var data = "A"; 
    function foo() { 
     document.getElementById('output').innerHTML = data; 
    } 
    return foo; 
    } 

    function b() { 
    var data = "B"; 
    var func = a(); 
    func(); 
    } 

    b(); 
</script> 
0
// Global variables are on every scope chain 
var global = 'global' 

// Function variables are only on a function's scope chain 
function bar() { 
    var fn = 'fn'; 

    // foo called from here where fn is avaialble as a local variable 
    foo(); // undefined 

    return function() { 
    alert(fn) 
    } 
} 


function foo() { 
    // foo can access global because it's on its scope chain 
    alert(global); 

    // Can't access fn because it's on bar's scope chain 
    // so returns undefined 
    alert(typeof fn);  
} 

// the function returned by bar has access to fn 
var f = bar(); // global 

f(); // fn 
Смежные вопросы