In my experiment I create random pseudo-words. I get the error message that my variable “word_list” is not defined.
I read that I should give my functions a name and that I should define my variables at the beginning (see below).
In the Begin Experiment tab I have the following (amateurish) JavaScript code:
shuffle = util.shuffle;
function generateRandomWord() {
const vowels = [“a”, “e”, “i”, “o”, “u”, “ü”, “ö”, “ä”];
shuffle(vowels);
const [v1, v2, v3] = vowels.slice(0, 3);const consonants = ["k", "t", "p", "m", "n", "s", "f", "r", "l"]; shuffle(consonants); const [k1, k2, k3, k4, k5, k6] = consonants.slice(0, 6); return [k1 + v1 + k2, k4 + v1 + k2, k1 + v1 + k3, k1 + v2 + k2, k5 + v3 + k6];
}
function generateUniqueWords(excludeWords = ) {
let words = generateRandomWord();while (words.some(word => excludeWords.includes(word))) { words = generateRandomWord(); } return words;
}
const excludeWords = [“can”, “man”, “tus”, “kan”, “net”, “fom”, “kam”, “fan”, “ken”, “fat”, “ton”, “tom”, “tim”, “nam”, “sun”, “fuk”, “top”, “sam”, “fük”, “kif”, “tun”, “pun”, “tum”, “nit”, “tik”, “tuk”, “tüp”, “lit”, “käs”, “nim”, “mik”, “nut”, “mus”, “sum”, “sin”, “sit”, “sat”, “nas”, “mop”, “fap”, “tip”, “fon”, “sik”, “sup”, “suf”, “män”, “men”, “küs”, “fat”, “fät”, “fun”, “pan”, “kim”, “nil”, “fak”, “tan”, “son”, “not”, “lik”, “rip”, “les”, “las”, “pur”, “pul”, “sim”, “pin”, “los”, “lös”, “rem”, “ruf”, “map”, “kit”, “rat”];
const numSets = 20;
const wordsDict = {};
for (let i = 1; i <= numSets; i++) {
const words = generateUniqueWords(excludeWords);
wordsDict[initial_word_${i}
] = words[0];
wordsDict[rhyming_word_${i}
] = words[1];
wordsDict[same_onset_${i}
] = words[2];
wordsDict[different_vowel_${i}
] = words[3];
wordsDict[completely_different_${i}
] = words[4];
}const initialWordsList = Array.from({ length: numSets }, (, i) => wordsDict[
initial_word_${i + 1}
]);
const rhymingWordList = Array.from({ length: numSets }, (, i) => wordsDict[rhyming_word_${i + 1}
]);
const sameOnsetList = Array.from({ length: numSets }, (, i) => wordsDict[same_onset_${i + 1}
]);
const differentVowelList = Array.from({ length: numSets }, (, i) => wordsDict[different_vowel_${i + 1}
]);
const completelyDifferentList = Array.from({ length: numSets }, (_, i) => wordsDict[completely_different_${i + 1}
]);let pairRhyming1 = [initialWordsList[0], rhymingWordList[0]];
let pairRhyming2 = [initialWordsList[1], rhymingWordList[1]];
let pairRhyming3 = [initialWordsList[2], rhymingWordList[2]];
let pairRhyming4 = [initialWordsList[3], rhymingWordList[3]];
let pairRhyming5 = [initialWordsList[4], rhymingWordList[4]];pairRhyming1.push(“rhyme”);
pairRhyming2.push(“rhyme”);
pairRhyming3.push(“rhyme”);
pairRhyming4.push(“rhyme”);
pairRhyming5.push(“rhyme”);let pairOnset1 = [initialWordsList[5], sameOnsetList[5]];
let pairOnset2 = [initialWordsList[6], sameOnsetList[6]];
let pairOnset3 = [initialWordsList[7], sameOnsetList[7]];
let pairOnset4 = [initialWordsList[8], sameOnsetList[8]];
let pairOnset5 = [initialWordsList[9], sameOnsetList[9]];pairOnset1.push(“onset”);
pairOnset2.push(“onset”);
pairOnset3.push(“onset”);
pairOnset4.push(“onset”);
pairOnset5.push(“onset”);let pairDifferentVowel1 = [initialWordsList[10], differentVowelList[10]];
let pairDifferentVowel2 = [initialWordsList[11], differentVowelList[11]];
let pairDifferentVowel3 = [initialWordsList[12], differentVowelList[12]];
let pairDifferentVowel4 = [initialWordsList[13], differentVowelList[13]];
let pairDifferentVowel5 = [initialWordsList[14], differentVowelList[14]];pairDifferentVowel1.push(“different_vowel”);
pairDifferentVowel2.push(“different_vowel”);
pairDifferentVowel3.push(“different_vowel”);
pairDifferentVowel4.push(“different_vowel”);
pairDifferentVowel5.push(“different_vowel”);let pairCompletelyDifferent1 = [initialWordsList[15], completelyDifferentList[15]];
let pairCompletelyDifferent2 = [initialWordsList[16], completelyDifferentList[16]];
let pairCompletelyDifferent3 = [initialWordsList[17], completelyDifferentList[17]];
let pairCompletelyDifferent4 = [initialWordsList[18], completelyDifferentList[18]];
let pairCompletelyDifferent5 = [initialWordsList[19], completelyDifferentList[19]];pairCompletelyDifferent1.push(“completely_different”);
pairCompletelyDifferent2.push(“completely_different”);
pairCompletelyDifferent3.push(“completely_different”);
pairCompletelyDifferent4.push(“completely_different”);
pairCompletelyDifferent5.push(“completely_different”);let word_list = [pairCompletelyDifferent1, pairCompletelyDifferent2, pairCompletelyDifferent3,
pairCompletelyDifferent4, pairCompletelyDifferent5, pairRhyming1, pairRhyming2, pairRhyming3, pairRhyming4, pairRhyming5, pairOnset1, pairOnset2, pairOnset3, pairOnset4, pairOnset5, pairDifferentVowel1, pairDifferentVowel2, pairDifferentVowel3, pairDifferentVowel4, pairDifferentVowel5];shuffle(word_list);
In the Begin Routine tab I have:
positions = [[(- 0.4), (- 0.25)], [0.0, (- 0.25)], [0.4, (- 0.25)]];
shuffle(positions);
positiona = positions.shift();
positionb = positions.shift();
positionc = positions.shift();
words = word_list.shift();source = words[0];
target = words[1];
condition = words[2];
psychoJS.experiment.addData(“source”, source);
psychoJS.experiment.addData(“target”, target);
psychoJS.experiment.addData(“condition”, condition);
I tried to move the code in the Begin Experiment tab to the Before Experiment tab, but then the experiment won’t initialize.
I read that I need to give my functions a name and I tried this:
generateRandomWord = function generateRandomWord() {
const vowels = [“a”, “e”, “i”, “o”, “u”, “ü”, “ö”, “ä”];
shuffle(vowels);
const [v1, v2, v3] = vowels.slice(0, 3);const consonants = ["k", "t", "p", "m", "n", "s", "f", "r", "l"]; shuffle(consonants); const [k1, k2, k3, k4, k5, k6] = consonants.slice(0, 6); return [k1 + v1 + k2, k4 + v1 + k2, k1 + v1 + k3, k1 + v2 + k2, k5 + v3 + k6];
}
generateUniqueWords = function generateUniqueWords(excludeWords = ) {
let words = generateRandomWord();while (words.some(word => excludeWords.includes(word))) { words = generateRandomWord(); } return words;
}
But this didn’t help.
I tried to initialize the functions as well as “word_list”, e.g., like this:
generateRandomWord();
generateUniqueWords();
wordlist=;
But the best I could get is this error:
ReferenceError: can’t access lexical declaration ‘word_list’ before initialization
In the crib sheet I read
If x is a function, define it in your initial JavaScript code block
but I do not understand what exactly I should do
Help is very much appreciated!