2014-05-26 4 views
0

--SOLVED--Как получить доступ к массиву в функции?

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/ Спасибо всем, что оставили ответ или комментарий, удаление вара из первой строки Исправьте это, я сейчас узнаю о подъеме, так как многие комментарии упоминают об этом. На данный момент я очень мало разбираюсь в JavaScript.

+0

Нам понадобится больше кода, но вы, вероятно, также должны больше узнать о «сфере видимости» в JavaScript. –

+2

Попробуйте отправить нам свой код, используя http://jsfiddle.net/ –

+0

Все работает нормально, когда я запускаю ваш код ... – Hatsjoem

ответ

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): в 2 вещи вместе - локально определенные var deck позже в функции и чем водрузили на вершине function - создает ошибку «deck undefined», когда используется 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 
+0

Спасибо, что ответили, но я не знаю, если это помогает, потому что мне нужно изменить массив внутри функции. Идея состоит в том, что если осталось менее 20 "карт", оставшаяся колода будет «перетасована». if (x <= 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]; // числовое значение каждой карты в палубе \t \t} – user3675304

+0

@ user3675304 нет, это не помогает. Вам нужно обновить свой пост образцом, который показывает поведение. Как было указано в комментариях, вам нужно узнать о сфере применения переменных в JavaScript. –

+0

Мой полный код: http://jsfiddle.net/cAWw2/ – user3675304

-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 
-1

Вы не можете использовать имя массива в предупреждении. Метод alert() отображает окно предупреждения с указанным сообщением и кнопкой OK. Вместо этого, если вы хотите показать элементы массива в поле предупреждения. Вы можете сделать это:

var deck=[1,2,3,4,5,6,7,8,9,10,10,10]; 

    function printDeck() 
    {for(var i = 0; i< deck.length(); ++) 
    console.log(deck[i]); // don't invoke alert(deck[i]); as it will swarm your browser     with 10 alert boxes 


    } 
    printDeck(); 
Смежные вопросы