这有什么意义呢?引擎故障还是什么?

发布于 2024-10-12 01:23:17 字数 359 浏览 3 评论 0原文

可能的重复:
Javascript 作用域变量理论

大家好,

我想问一些奇怪的问题。这是代码。

var a = "defined";
function f() {
   alert(a);
   var a = 5;
}
f();

警报“未定义”

任何人都可以解释为什么我得到“未定义”。

法提赫..

Possible Duplicate:
Javascript scoping variables theory

Hi all,

I want to ask something stranger. Here is the code.

var a = "defined";
function f() {
   alert(a);
   var a = 5;
}
f();

alerts "undefined"

Can anyone explain that why I am getting "undefined".

Fatih..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

对你的占有欲 2024-10-19 01:23:17

我想这就是所谓的JavaScript Hoisting。观看此视频以了解有关该问题的更多信息及其解决方案:

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

要使其正常工作,您必须删除 var 关键字形式变量a

var a = "defined";
function f() {
   alert(a);
   a = 5;
}
f();

所以基本上,这是一个变量范围问题。删除 var 关键字的行为使变量全局可用。因此,这次没有出现错误。

That is called JavaScript Hoisting i suppose. Check out this video to learn more about it and solution to it:

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

To make it work, you will have to remove the var keyword form variable a:

var a = "defined";
function f() {
   alert(a);
   a = 5;
}
f();

So basically, it is a variable scope issue. The act of removing var keyword makes a variable globally available. Hence, there is no error raised this time.

阿楠 2024-10-19 01:23:17

在函数中你会得到一个新的范围。

函数中的 var a 声明了一个局部变量 a,它屏蔽了全局变量。

a 的赋值稍后发生(在警报之后),因此在此之前 a 是未定义的。

令人困惑的部分是,如果您在函数顶部或函数中的其他任何位置(甚至可以在 if 内部)声明 var a ,这并不重要。效果是相同的:它为该范围声明一个变量(即使对于位于声明之前的代码也有效)。这就是为什么 jslint 建议在顶部声明所有局部变量。

In the function you get a new scope.

The var a in the function declares a local variable a, which masks the global one.

The assignment to a takes place later (after the alert), so until then a is undefined.

The confusing part is that it does not matter if you have the var a declaration on top or anywhere else in the function (can even be inside an if). The effect is the same: It declares a variable for that scope (effective even for code that is located before the declaration). That is why jslint recommends to declare all local variables on top.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文