日期:2014-05-16  浏览次数:20503 次

新手求助:在函数里怎么判断函数外的变量是否定义
JScript code

function outerfunc() {
    var mvar = 1;
    function innerFunc() {
        if (mvar == undefined)
            var mvar = 100;
        console.log(mvar);
    };
    innerFunc();
}
outerfunc();



每次输出都是100啊。。我知道这是因为js解释器先解析再运行导致预定义了局部变量mvar,从而覆盖了外面的 mvar,但如何才能避免这种现象,正常地判断一个外部变量是否定义并在它未定义时准备一个初值呢?

目前我只想到把它改造成全局变量和改变变量名这两种折衷方法。
JScript code

function outerFunc() {
    mvar = 1;
    function innerFunc() {
        if (mvar == undefined)
            mvar = 100;
        console.log(mvar);
    };
    innerFunc();
}
outerFunc();



JScript code

function outerfunc() {
    var mvar = 1;
    function innerFunc() {
        if (mvar == undefined)
            var _mvar = 100;
        else
            var _mvar = mvar;
        console.log(_mvar);
    };
    innerFunc();
}
outerfunc();



但是仍想知道有没有不用折衷的方法呢?

------解决方案--------------------
没明白你要表单什么。。


JScript code
function outerfunc() {
    var mvar = 1;
    function innerFunc() {
        if (mvar == undefined)
            var mvar = 100;//如果你是要操作outerfunc的私有变量mvar,不要使用var定义mvar,要不这个mvar是innerFunc的变量了
        console.log(mvar);//这里也是innerFunc的变量mvar
    };
    innerFunc();
}
outerfunc();

------解决方案--------------------
if (typeof mvar == "undefined")
mvar = 100;