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

无意乂 2012-08-21 10:10:20

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


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

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

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



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


但是仍想知道有没有不用折衷的方法呢?
...全文
218 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
无意乂 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

楼主是变量作用域没搞明白,自己慢慢研究。
[/Quote]

我已经看了两天作用域了。。就是因为有了一定理解才能提出这个问题和两种折衷方法的吧。。
只是想看看大家有没有更好的方法而已。。
目前自己觉得第二种折衷方法最能让我接受了。不会污染全局变量,而且把内部用到mvar的地方全部替换成_mvar也不是很难。
  • 打赏
  • 举报
回复
楼主是变量作用域没搞明白,自己慢慢研究。
无意乂 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

if (typeof mvar == "undefined")
mvar = 100;
[/Quote]
厉害,原来这样可以既检测变量是否存在又避免检测时报错。
但这样的话mvar就变成全局变量了。和我的第一种折衷办法效果是一样的了。
  • 打赏
  • 举报
回复
if (typeof mvar == "undefined")
mvar = 100;
无意乂 2012-08-21
  • 打赏
  • 举报
回复
而且如果那里不加var的话,就变成这样了

if (mvar == undefined)
mvar = 100;

如果外面没有定义mvar,直接就报错了。。
无意乂 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

没明白你要表单什么。。


JScript code
function outerfunc() {
var mvar = 1;
function innerFunc() {
if (mvar == undefined)
var mvar = 100;//如果你是要操作outerfunc的私有变量mvar,不要使用var定义mvar,……
[/Quote]

我就是想在innerFunc里面判断mvar是否已经定义了。如果没有定义那我就给它定义一个,赋个初值
innerFunc中还会有很多用到outerFunc里的mvar的地方。所以我有必要先判断一下它是否已定义。。
泡泡鱼_ 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
没明白你要表单什么。。



JScript code
function outerfunc() {
var mvar = 1;
function innerFunc() {
if (mvar == undefined)
var mvar = 100;//如果你是要操作outerfunc的私有变量mvar,不要使用var定义……
[/Quote]
这位朋友的解释很清楚了
aelfintiger 2012-08-21
  • 打赏
  • 举报
回复
是否为空
  • 打赏
  • 举报
回复
没明白你要表单什么。。


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();


87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧