如何访问函数中的数组?

时间:2014-05-26 06:42:26

标签: javascript scope

- 解决 -

var deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10];
alert(deck.length);

function getDeck() {
    alert(deck);
}

当我在一个网站上运行这个第一个警报有效但第二个留下一个错误消息说甲板是未定义的,我已经尝试过其他方式写这个但是它们不起作用,我如何在一个内部访问这个数组功能

这个想法是它是一个二十一点游戏,当我运行newGame函数时,它会检查剩余的卡片是否少于21张。如果是这样的话,它会通过将它重置为开始时的方式来“洗牌”:

function newGame() {
    if (deck.length <= 20) {
        var deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
    }
}

我的完整代码:http://jsfiddle.net/cAWw2/ 感谢所有留下答案或评论的人,从修复它的第一行删除var,我现在将学习提升,因为很多评论都提到了。到目前为止,我对JavaScript知之甚少。

2 个答案:

答案 0 :(得分:2)

基于新的示例问题具有可变范围:当您可能想要在外部范围中更改一个时,您在var desk函数内声明新的本地newGame。可能修复 - 删除var以从外部(可能是全局)范围更改deck

function newGame() {
    if (deck.length <= 20) {
           deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
    }
}

注意(感谢h2ooooooo):将两件事物放在一起 - 在函数后面本地定义var deck,然后提升到函数的顶部 - 创建&#34; deck undefined&#34;使用deck.length时出现错误(在大多数其他语言中都是一个来自全局范围的错误,但在JavaScript中它稍后在函数中声明并以undefied作为值提升)。

JavaScript 'hoisting':函数在稍后在同一范围内声明之前是可见的和可用的,变量只在范围的开头可见undefined作为值。因此,如果您在执行getDeck之前致电var deck,那么您将获得undefined而不是deck

getDeck();// will fail here
var deck=[1,2,3,4,5,6,7,8,9,10,10,10];
alert(deck.length);
function getDeck()
  {alert(deck);}
getDeck();// will work  here

答案 1 :(得分:-1)

var deck=[1,2,3,4,5,6,7,8,9,10,10,10];
function getDeck(){
    for (var i = 0; i < deck.length; i++){
         console.log(deck[i]);
    }
}

getDeck(); //remember to call the function