re: Fictional Q&A about JavaScript Hoisting VIEW POST

FULL DISCUSSION
 

In seriousness, this raises a question in my mind: does choosing to assign instead of declare functions have to do with avoiding weirdness with hoisting or some related issues?

 

That's a good question. For one, the concept of hoisting doesn't seem to be something people write their programs around. It's a convenient side-effect that some don't even recognize.

The thing about initialization versus declaration comes down to convention and flexibility.

It is the convention to create a class with a function declaration:

function Bat{...}

But if I wanted to create a function prototype, I would use an assignment operator.

Bat.prototype.fly = function(){...}

Because functions are first order, I can assign them, return them, use them as parameters.

Whether to declare or assign might just come down to style for some, but the differences go beyond hoisting.

 

I was thinking in terms of assigning to variables, but thanks for pointing out those other ways of assigning. I don't normally think of it that way with prototype methods and callbacks, but that does make sense.

 

To add on to what I wrote, you can also re-assign to a variable that contains an anonymous function. You can take advantage of this by writing an if statement that checks if we are in a certain mode


var strictMode = true;

var logNumber = function(num){
  return num;
}

if(strictMode){
  logNumber = function(num){     
    if(isNaN(num)){
      return; // do nothing
    }else {
      return num; // return number 
    }
  }
}

We would've had to have declared two separate functions if we hadn't created a function expression. Still, the difference is minimal.

code of conduct - report abuse