如何正确使用范围?

时间:2019-05-15 15:56:24

标签: javascript scope

我不确定何时将变量放在函数的顶部还是内部。

我尝试将变量放在顶部,有时放在函数内部。但是,在某些情况下,它并不总是像在这种情况下那样位于内部。

function transformFirstAndLast(array){
    var first = array[0];
    var last = array[array.length-1];
    var squid = {};

    squid[first] = last;
    return squid;
}

vs

var first = array[0];
var last = array[array.length-1];
var squid = {};

function transformFirstAndLast(array){
    squid[first] = last;
    return squid;
}

第一个作品。但是,我认为您可以访问变量,因为它是全局范围的?我很困惑第二个为什么不起作用?

2 个答案:

答案 0 :(得分:0)

第二个代码的问题是您试图访问不存在的内容:

var first = array[0]; // <-- trying to access 'array'
var last = array[array.length-1]; // <-- trying to access 'array'
var squid = {};

function transformFirstAndLast(array){ // <-- 'array' is an argument of this function, and therefore only exists inside of the function
    squid[first] = last;
    return squid;
}

在JavaScript中,您可以访问在您的作用域中声明的变量以及您的父母。

希望有帮助!

答案 1 :(得分:0)

让我们举一个最后的例子:

var first = array[0];
var last = array[array.length-1];
var squid = {};

function transformFirstAndLast(array){
    squid[first] = last;
    return squid;
}

在第1行,arrayundefined,因为它不在当前范围内。变量array仅存在于transformFirstAndLast方法内。如果您调用此方法,将会发生:

  • squid存在:{}
  • firstlast均为undefined
  • 我们将属性undefined(= first)分配给对象squid,其值为undefined(= last
  • 我们返回{ undefined: undefined }

您在需要它们的地方声明变量。在这种情况下,firstlast仅在您有array时才有意义,因此在方法内部。