Javascript 单线性变量声明

Javascript 单线性变量声明,javascript,ecmascript-5,Javascript,Ecmascript 5,声明全局变量很容易,只需将标识符后跟equals和所需的值。您可以在任何地方执行此操作,例如在为函数调用或在循环中设置参数时。但是当我想要这个的时候 变为局部的东西似乎受到了更多的限制。我不能在函数调用中声明局部变量,并将var x=I+3只需一遍又一遍地重新声明变量。我在文件中有没有忽略了什么?还是就是这样 ... obj.do_my_thing(cached_int = 4 + cars.amount(), true); ... for( var e in list ) cached_fl

声明全局变量很容易,只需将标识符后跟equals和所需的值。您可以在任何地方执行此操作,例如在为函数调用或在循环中设置参数时。但是当我想要这个的时候 变为局部的东西似乎受到了更多的限制。我不能在函数调用中声明局部变量,并将
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);
...
我不能在函数调用中声明局部变量

如果您试图从对同一函数的两个调用中访问同一变量,则必须在外部范围中声明该变量

例如

我不能在函数调用中声明局部变量

是的,你可以:

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
var x=0;
对于(变量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
for(变量i=0;i<1000;i++){
//声明window.x(如果它不存在)
如果(!window.x)
窗口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
}
函数foo(){
对于(变量i=0;i<1000;i++){
//如果foo.x不存在,则声明它
如果(!foo.x)
foo.x=0;
x=i+3;
}
console.log(x);/1002
}

我想为所有像我这样浏览互联网寻找同一“问题”解决方案的人回答我自己的问题:您只需在函数声明的参数中声明局部范围的变量。这样,您就不需要使用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');

我认为你需要在这个问题上添加一些清晰的代码示例来说明你的意思,因为目前还没有那么清楚。你为什么要在作业前加上
var
关键字?它的作用是什么?这很好,但不如我只声明局部变量“在运行中”那么优雅。@JohnSmith你能详细说明一下“在运行中”吗?看看上面我发布的示例。@JohnSmith我在编辑的答案中证明了一个在运行中的示例。很抱歉,但我相信window.x是全局的。如果这就是你的意思。
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');