mep
mep

Reputation: 67

Javascript: JSHint: Expected an assignment or function call and instead saw an expression

This code gives me two errors when I'm trying it in JSHint. The error is: Expected an assignment or function call and instead saw an expression. I understand what the error mean, but I can't figure out why I'm recieving it. The code works as it is.

function flag(land, position) {
    this.pos = position,
    this.link = land,
    this.hideFlag = function () {
        position.innerHTML = ' ';
    },
    position.addEventListener('click', this.hideFlag.bind(this));  //Here
}

var elfenbenskusten = new flag('<div id="flag-elfenbenskusten" class="flag elfenbenskusten"><div class="part1"></div><div class="part2"></div></div>', document.getElementById('flag-elfenbenskusten')),
sverige = new flag('<div id="flag-sverige" class="flagga1 sverige"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div></div>', document.getElementById('flag-sverige')),
maruritius = new flag('<div id="flag-maruritius" class="flagga2 maruritius"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div><div class="box5"></div></div>', document.getElementById('flag-maruritius')),
japan = new flag('<div id="flag-japan" class="flagga3 japan"><div class="box1"></div><div class="cirkel1"></div></div>', document.getElementById('flag-japan')),

flags = [];
flags.push(
            elfenbenskusten,
            sverige,
            maruritius,
            japan
            ),

function () {
    for (var land = 0; land < flags.length; land++)
        flags[land].pos.innerHTML = flags[land].link;
}();  //Here

Upvotes: 0

Views: 168

Answers (2)

javinor
javinor

Reputation: 674

function flag(land, position) {
    this.pos = position,           // <== why , and not ;?
    this.link = land,              // <== why , and not ;?
    this.hideFlag = function () {
        position.innerHTML = ' ';
    },                             // <== why , and not ;?
    position.addEventListener('click', this.hideFlag.bind(this));  //Here
}

and also at the end of the flag.push()

Upvotes: 2

Quentin
Quentin

Reputation: 943568

JSHint expects you to use separate statements (terminated with semi-colons) but you are using a single statement with each expression being separated with the comma operator.

That also allows you to unwrap your for loop from the function expression.

function flag(land, position) {
    this.pos = position;
    this.link = land;
    this.hideFlag = function () {
        position.innerHTML = ' ';
    };
    position.addEventListener('click', this.hideFlag.bind(this));
}

var elfenbenskusten = new flag('<div id="flag-elfenbenskusten" class="flag elfenbenskusten"><div class="part1"></div><div class="part2"></div></div>', document.getElementById('flag-elfenbenskusten')),
sverige = new flag('<div id="flag-sverige" class="flagga1 sverige"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div></div>', document.getElementById('flag-sverige')),
maruritius = new flag('<div id="flag-maruritius" class="flagga2 maruritius"><div class="box1"></div><div class="box2"></div><div class="box3"></div><div class="box4"></div><div class="box5"></div></div>', document.getElementById('flag-maruritius')),
japan = new flag('<div id="flag-japan" class="flagga3 japan"><div class="box1"></div><div class="cirkel1"></div></div>', document.getElementById('flag-japan')),

flags = [];
flags.push(
            elfenbenskusten,
            sverige,
            maruritius,
            japan
            );


for (var land = 0; land < flags.length; land++) {
  flags[land].pos.innerHTML = flags[land].link;
}

Upvotes: 2

Related Questions