全球& Javascript中的局部变量

时间:2011-07-08 17:36:27

标签: javascript global local

我有一个变量和两个函数。两者都使用该变量。并且第一个函数是每次使用变量值(全局)。这就是我想要的,但它不适合我。

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 个答案:

答案 0 :(得分:1)

也许这个小提琴可以帮助你更好地理解全球范围: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

你的函数funcName()

之后缺少的parens()

答案 1 :(得分:1)

执行代码时问题是时间。 uplodify选项在页面加载上设置(包括在页面加载时传递P),而P是一个字符串,稍后会更改P(通过save())不会更改您传递的值。

您可以通过将对象的引用作为选项传递来解决此问题,而不是字符串 编辑:不起作用。

该插件提供uploadifySettings [docs]方法来更改uploadify实例的设置。用它来更新scriptData设置:

function Save() {
    $('#btnBrowse').uploadifySettings('scriptData', {'Album_ID' : guid()}, true);
    $('#btnBrowse').uploadifyUpload();
}

答案 2 :(得分:0)

x = 1;

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

function f2()
{
  // use x
}

// x is 1

f1();

// x is 2

f2();

答案 3 :(得分:0)

首先,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控制台中尝试了代码,我认为它确实有用。