как выполнить функцию в контексте локальных переменных
имеем такой код
<script>
var $=6;
function f(){alert($)};
function my(){
var $=11;
f()//6
};
my();</script>
как заставить функцию f выводить 11? что то у меня без eval не получается |
<script type="text/javascript">
var $ = 6;
function f() { alert($) };
function my() {
$ = 11;
f()//6
};
my();
</script>
Использование локальных и глобальных переменных поможет разобраться |
Либо Определение функций с параметрами
какой вариант больше нравится и устраивает
<script type="text/javascript">
var $ = 6;
function f(v) { alert(v) };
function my() {
var $ = 11;
f($);
};
my();
</script>
|
Цитата:
с помощью eval получается жуткая конструкция
eval('('+f.toString()+')()')//11
|
я же первым ответом написал пример, дело в том что вы создаете в функции my() локальну переменную, а не меняете значение глобальной
|
vadim5june,
можно писать без var и она заменит глобальную переменную
var $=6;
function f(){alert($)};
function my(){
$=11;
f()//11
};
my();
|
Цитата:
|
Цитата:
она будет выполнятся в контексте локальных переменных если будет объявлена внутри функции-и наверн без eval это невозможно |
а такой вариант?
<script type="text/javascript">
var $ = 6;
function my() {
var $ = 11;
var f = function () { alert($) }
f();
};
my();
</script>
|
Цитата:
с помощью eval я как раз это делаю Это я простой пример привел-на самом деле функция очень большая и у нее много переменных которые надо выполнять в контексте локальных переменных в разных функциях объявлять везде не получится-передавать параметрами большая морока |
vadim5june,
Ну а ежли все функции и констркуции обрамить в общую анонимную функцию ? |
<script type="text/javascript">
var $ = 6;
var f = function () { alert($) }
function my() {
var $ = 11;
var f1 = f; //тут если есть возможность сделать копию а не ссылку передать, то должно прокатить, но я не знаю как
f1();
};
my();
</script>
не уверен что есть возможность скопировать функцию, если только не извратиться, прочитать функцию в строку и потом создать заново, тогда она уже станет локальной |
Цитата:
|
Цитата:
есть еще вариант new Function |
vadim5june,у меня так катит - и с евал-ом мало мучений
var $ = 6;
function f(){alert($)};
function my(){
var $ = 11;
var f1 = f + "";
eval(f1);
f();//11
};
my();
|
Цитата:
-твой вариант мне нравится + :) |
vadim5june,
|
| Часовой пояс GMT +3, время: 13:25. |