Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 声明局部变量_Javascript - Fatal编程技术网

Javascript 声明局部变量

Javascript 声明局部变量,javascript,Javascript,我想声明一个局部变量,如下所示: (var n=1) 主要是为了操纵它的求值顺序 那我就可以了 var increaseadNumber = ( ar={ inc:function(n){ return n+1 }, dec:function(n){ return n+2 } } ).inc(1); console.log(ar)//the object console

我想声明一个局部变量,如下所示:

(var n=1)
主要是为了操纵它的求值顺序

那我就可以了

var increaseadNumber = (
    ar={
        inc:function(n){
            return n+1
        },
        dec:function(n){
            return n+2
        }
   }
).inc(1);
console.log(ar)//the object
console.log(increaseadNumber )//2
但是,在我的示例中,ar位于全局名称空间中,并且

var increaseadNumber = (
  var ar={
        inc:function(n){
            return n+1
        },
        dec:function(n){
            return n+2
        }
   }
).inc(1);//syntax error
生成“SyntaxError:意外令牌变量”


当然,我可以通过2条语句来声明这一点,但我更愿意使用1条语句。

除了在
for(var…
中,
var
关键字不能跟在开括号后面。可以将表达式包装到函数中:

ar = (function (n) {
  return /* compute the value for ar here */;
})(1)

您可以将语句拆分为:

var ar={inc:function(n){return n+1},dec:function(n){return n+2}}; ar.inc(1);
只需在本地声明它,并在单独的表达式中调用它

如果你真的想要一个表达式,我建议你声明一个一次性的局部变量

var ar = { 
  inc: function (n) { return n+1 },
  dec: function (n) { return n+2 } 
}, __ = ar.inc(1);

当一个表达式是变量声明时,调用多个表达式的唯一方法是声明多个变量。不确定要做什么,但这个IIF(立即调用函数)可能适合您?增加了一点间距,这是。。。如果要维护代码,建议使用

   alert(
    (function(n){
     n = n || 1;
     return {
              inc: function(n){ return n+1; },
              dec: function(n){ return n+2; }
            };

    }(1)).inc(1)
   ); //=> 2

为什么不把它分成两行呢

var ar={inc:function(n){return n+1},dec:function(n){return n+2}};
ar.inc(1);
并在操作时添加一些合理的空白:

var ar = {
    inc: function(n) {
        return n + 1
    },
    dec: function(n) {
        return n + 2
    }
};
ar.inc(1);
或者如果你真的不喜欢空白,这里有一个折衷方案:

var ar = {
    inc: function(n) { return n + 1 },
    dec: function(n) { return n + 2 }
};
ar.inc(1);

如果需要局部变量,请尝试在函数中声明它

(function () {
    var ar={inc:function(n){return n+1},dec:function(n){return n+2}};
    return ar;
})().inc(1)

你听说过空格或新行吗?您的代码将无法维护。我需要一个(a=new windowPopup()).show();键入thing,这样对维护来说应该不会太坏。这会改变ar是什么。从您的问题来看,我不清楚您要在新范围中声明哪些符号,以及要导出哪些符号。要排除在全局范围之外的参数需要是函数的参数,或者在函数内部的
var
中声明。这一个不起作用,因为
var
语句中的逗号运算符用于分隔多个声明。@Lapple我意识到并修复了这一点。
(function () {
    var ar={inc:function(n){return n+1},dec:function(n){return n+2}};
    return ar;
})().inc(1)