Javascript函数

时间:2016-10-12 18:18:36

标签: javascript variables

我正在学习JS全局和局部变量,但我对这个特定函数感到困惑。

var text = "top";
function print() {
    return (text);
}
print();
//returns 'top'

我明白为什么它会回归顶峰。 var text是一个全局变量。 print()函数可以访问它并返回text,从而返回'top'

var text = "top";
function print() {
    return (text);
    var text = "bottom";
}
print();
// returns undefined

我对全局变量和局部变量有基本了解(或者我认为)。我知道函数print可以访问自己的局部加全局变量。

我不明白为什么会返回undefined。据我所知,行return text;检索它可以访问的全局变量text(如第一个代码块所示)。返回text = 'top'后,它还声明了自己的局部变量,其名称相同但值不同'bottom'。据我所知,局部变量bottom应该坐在那里,因为它没有被提前调用。

为什么它没有显示top(甚至显示bottom),而是显示undefined

4 个答案:

答案 0 :(得分:6)

Javascript提升您的变量声明,使您的代码功能如下:

var text = "top";
function print() {
    var text;
    return (text);
    // unreachable code below
    text = "bottom";
}
print();
// returns undefined

由于当您点击text时尚未定义您的函数中声明的return(text),并且text="bottom"无法访问,print()会返回undefined

有关详情,请参阅What is the scope of variables in Javascript。这个问题涉及案例7。

答案 1 :(得分:2)

这与variable hoisting

有关

第二个示例中的代码按以下顺序执行:

  1. 声明全局变量text
  2. 将全局变量text的值设置为“top”
  3. 声明函数print
  4. 致电功能print
  5. 声明局部变量text(由于悬挂)
  6. 本地变量text(此时为undefined)的返回值
  7. 将局部变量text的值设置为“bottom”
  8. 它被执行就像是这样写的:

    var text = "top";
    function print() {
        var text;
        return (text);
        text = "bottom";
    }
    print();
    

    如您所见,text的值在实际定义之前返回,因此它是undefined

答案 2 :(得分:0)

这是由于托管。

  

hoisting教导变量和函数声明在物理上移动到编码顶部

您可以获取样本和解释here

答案 3 :(得分:-1)

你的任务:

var text = "bottom";
返回功能后出现

 所以这是不恰当的,这是无法实现的陈述



var text = "top";
function print() {
    return (text);
    //var text = "bottom";
  //the above assignment comes after a return function
  //so it is not proper, it is unreachable statemen
}
alert(print());
// returns undefined