为什么控制台中的变量声明总是返回“未定义”?

问题描述 投票:5回答:3

我正在使用最新的Firefox(4.0.1)和Firebug(1.7.2)。

每次我在控制台中输入变量声明时,都会返回斜体的“未定义”警告。

例如,如果我输入“ var x = 5;”那么响应是“未定义”,而不是“ 5”。

[之后,如果我在控制台中输入“ x”,则会返回正确的5值。但是,错误/警告有点令人讨厌,非常想知道原因和解决方法,如果我是唯一遇到这种情况的人。

有趣的是,如果我不使用“ var”,而只是使用“ x = 5”声明值,那么将显示正确的行为,并且控制台中将返回“ 5”。

firebug
3个回答
4
投票

((这只是一个猜测,我不是Java语言规则或Firebug细节方面的专家。)

控制台向您提供的反馈是对您输入的行进行评估的结果。我假设declaration var x = ...是一个没有值的语句,而简单赋值(x = ...)符合C的传统,并且功能语言的“一切都是表达”的态度,该表达式的计算结果为指定的值。


0
投票

Firebug正在报告评估表达式的结果,等效于:

typeof eval(“ var x = 5;”);“未定义”

typeof eval(“ x = 5;”);“数字”


0
投票

与其他语言不同,在JavaScript中,每段代码都是表达式或语句。表达式总是返回一个值。语句总是返回未定义的。 original JavaScript specification from 1997.

中定义了什么是语句,什么是表达式

例如,说这是我们的程序:

    var color = "blue";
    color = "red"; 

您将注意到,如果您将此行逐行输入到控制台中,则第一行返回未定义,而第二行返回“红色”。

这是因为,您可能已经猜到,变量声明(var something = something)是语句,而变量赋值(something = something)是表达式。如果您感到好奇,请尝试阅读上面我链接的规范中“简单分配”部分下的11.13.1(第50页)中的JavaScript如何评估赋值。

© www.soinside.com 2019 - 2024. All rights reserved.