Глобальные и локальные переменные в Javascript - PullRequest
1 голос
/ 08 июля 2011

У меня есть одна переменная и две функции.Переменная используется обоими.и первая функция изменяет значение переменной (глобально) каждый раз, когда оно используется.Это то, что я хочу, но это не работает со мной.

x = 1;

function f1()
{
  x = x + 1;
  // use x 
} 

function f2()
{
  // use x
}

Я читал другие темы, но x всегда равен 1, что очень расстраивает: |

добавлено: фактический код

<script type="text/javascript">

function S4() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}

function guid() {
return (S4() + S4() + ";" + S4() + ";" + S4() + ";" + S4() + ";" + S4() + S4() + S4());
}

P = '';

function Save() {
P = guid();
$('#btnBrowse').uploadifyUpload();
}

$(document).ready(function () {


            $('#txtText').elastic();

            $('#btnBrowse').uploadify({
                'uploader': '../uploadify.swf',
                'script': '../uploadify.ashx',
                'cancelImg': '/uploadify/cancel.png',
                'folder': '../images/Albums/',
                'multi': true,
                'fileDesc': 'Web Image Files (.JPG, .GIF, .PNG)',
                'fileExt': '*.jpg;*.gif;*.png',
                'scriptData': { 'Album_ID': P },
                'buttonText': 'Upload Images'
            });

});

</script>

, поэтому переменная P,и он используется функцией jquery (uploadify).каждый раз, когда я выполняю функцию сохранения, я ожидаю, что получаю новое значение для переменной P.Но всегда ли это то же самое?

Ответы [ 4 ]

1 голос
/ 08 июля 2011

Проблема в времени при выполнении кода.Параметры uplodify установлены на загрузка страницы (что включает в себя то, что P передается при загрузке страницы), а поскольку P - строка, изменение P позже (через save()) не изменитсяпереданное вами значение.

Это можно решить, передав в качестве опции ссылку на объект вместо строки Правка: не работает.

Плагин предоставляет метод uploadifySettings [docs] для изменения настроек экземпляра uploadify.Используйте его для обновления scriptData настроек:

function Save() {
    $('#btnBrowse').uploadifySettings('scriptData', {'Album_ID' : guid()}, true);
    $('#btnBrowse').uploadifyUpload();
}
1 голос
/ 08 июля 2011

Может быть, эта скрипка поможет вам лучше понять глобальную область видимости: http://jsfiddle.net/XFx27/1/

var x = 0;

function add1()
{
 x = x + 1;
}

function show()
{
    alert(x);
}

add1();
show(); //alerts 1
add1();
show(); //alerts 2

Ваши пропущенные символы parens () после функции funcName ()

0 голосов
/ 08 июля 2011

во-первых, функция f1 должна быть:

function f1(){
   x = x + 1;
   // use x
}

var x;

function f1(){
    x = x + 1;
    console.log(x);
}

function f2(){
    console.log(x);
}

f1(); // 2
f2(); // 2

Я попробовал код в консоли Chrome, и я думаю, что он действительно работает.

0 голосов
/ 08 июля 2011
x = 1;

function f1()
{
  x = x + 1;
  // use x 
} 

function f2()
{
  // use x
}

// x is 1

f1();

// x is 2

f2();
...