【问题标题】:Global & Local variables in JavascriptJavascript 中的全局变量和局部变量
【发布时间】:2011-07-08 17:36:27
【问题描述】:

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

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 的新值。但总是一样的吗??

【问题讨论】:

  • 请向我们展示您的实际代码。
  • 您发布的代码应该可以工作。展示一个不起作用的用法示例(以及它如何不起作用)。
  • 你贴的代码没有问题
  • @HTB 我认为您打算在f1f2 之后使用(),否则该函数无法执行。
  • 问题是代码真的很长。无论如何,第二个函数是 jquery 函数。这会改变情况吗?

标签: javascript global local


【解决方案1】:

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

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

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

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

【讨论】:

  • Felix,我在修改代码后尝试上传图片,但错误显示 Album_ID 为空。
  • yeeeeeeees :) 。终于成功了。我当时心情很不好。非常感谢菲利克斯。我真的很感激
【解决方案2】:

也许这个小提琴可以帮助你更好地理解全局范围: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() 之后缺少的括号 ()

【讨论】:

    【解决方案3】:
    x = 1;
    
    function f1()
    {
      x = x + 1;
      // use x 
    } 
    
    function f2()
    {
      // use x
    }
    
    // x is 1
    
    f1();
    
    // x is 2
    
    f2();
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 第二个函数是jquery函数
      • 你可以尝试在prop中设置x的值,并在jQuery中读取。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2019-04-04
      • 2013-10-06
      相关资源
      最近更新 更多