2017-01-06 13 views
2

Можно ли изменить лексическое охват javascript, чтобы функции использовали область видимости переменной, которая действует, когда они вызываются не тогда, когда они были определены? В двух словах я могу изменить цепочку областей, связанных с функцией?отключить лексическое охват в javascript

Пример для этого: Я хотел бы быть в состоянии выполнить что-то вроде этого, не получив сообщение об ошибке, что у не определено:

function f(){y+2}; 
function g(){ 
var y=2; 
f(); 
return y; 
} 
g(); 
+1

Для этого есть аргументы. –

+1

'function f (y) {return (y + 2)};' и соответственно изменить свой вызов. –

+0

Помимо использования 'eval', no. Почему вы чувствуете, что вам это нужно? –

ответ

0

Ваш вопрос может быть связано с непониманием вашего вопрос. y не определен в функциональном диапазоне f(), и вы никогда не присваиваете ему значение. y в g() относится к этой функции.

В вашем примере:

function f(){ y+2 }; 
function g(){ 
    var y=2; 
    f(); 
    return y; 
} 
g(); 

Если g() используется глобальный y, то y в f() будет определен во время выполнения. Отбросьте ключевое слово var в g(), чтобы создать глобальный y во время компиляции.

function f(){ y+2 }; 
function g(){ 
    y=2; 
    f(); 
    return y; 
} 
g(); 

Примечание: Creating глобальную область переменной, как это возможно, но НЕ рекомендуется. Поскольку ваш пример надуман и используется только для понимания области, это ничего не повредит.