一个班轮变量声明

时间:2014-08-21 11:10:07

标签: javascript ecmascript-5

声明全局变量很简单,只需将标识符后跟等号和所需的值。您可以在任何地方执行此操作,例如为函数调用或循环内部设置参数时。但是当我想要这个 变量是本地的东西似乎变得更受限制。我不能在函数调用中声明局部变量,并且将var x=i+3;放在循环中只会反复重新声明变量。在文件中有没有我忽略的东西?或者这只是它的方式?

...
obj.do_my_thing(cached_int = 4 + cars.amount(), true);
...

for( var e in list ) cached_float += cached_int/0.5;
console.log(cached_float);
...

我想要的是:

...
obj.do_my_thing(var cached_int = 4 + cars.amount(), true);
...

for( var e in list ) var cached_float += cached_int/0.5;
console.log(cached_float);
...

3 个答案:

答案 0 :(得分:1)

  

我无法在函数调用中声明局部变量

如果您尝试从两次调用同一函数访问同一变量,则必须在外部范围内声明该变量

E.g。

function foo() {
    var i = 0;
    function bar() {
        i++;
    }
    bar();
    alert(i);//1
    bar();
    alert(i);//2
}

答案 1 :(得分:1)

  

我无法在函数调用中声明局部变量

是的,你可以:

function foo() {
    var bar = 1;    // Local variable
    window.baz = 2; // Global variable
}

foo();

console.log(bar); // Undefined
console.log(baz); // 2

  

...并且将var x = i + 3;在循环内部只需重复声明变量

您可以在循环之外声明变量:

var x = 0;

for (var i = 0; i < 1000; i++)
    x = i + 3;

console.log(x); // 1002

  

这很好,但不像我可以在移动中声明局部变量那样优雅。

你可以在一定程度上:

for (var i =0; i < 1000; i++) {
    // Declare window.x if it doesn't already exist
    if (!window.x)
        window.x = 0;

    x = i + 3;
}

console.log(x); // 1002

  

对不起,我相信window.x是全球性的。如果这就是你的意思。

您可以将变量分配给您的函数:

function foo() {
    for (var i =0; i < 1000; i++) {
        // Declare foo.x if it doesn't already exist
        if (!foo.x)
            foo.x = 0;

        x = i + 3;
    }

    console.log(x); // 1002
}

答案 2 :(得分:0)

我想回答我自己的问题,像我这样的人为了解决同一个“问题”而浏览互联网:你可以在函数声明的参数中简单地声明本地范围的变量。这样您就不需要使用var关键字设置变量:

function q(param){
  var b = my_array.indexOf(param);
  if(b!=-1) my_array.splice(b,1);
}

function p(param, b){
  if((b=my_array.indexOf(param))!=-1) my_array.splice(b,1); // ♥ ♥ ♥
}

p('hello world');