JavaScript has what we call higher order functions. In fact, that's one of the more powerful features. One of the things we really like about functions in JavaScript is that they are higher order functions. What does that mean to be a higher order function. That simply means that you are able to pass a function into another function as an argument, or return a function from a function using the return statement. When those features exist, we say that programming language has higher order functions and JavaScript has those.
Now, to introduce this concept to you, I need to introduce two new global functions, set timeout and set interval. Now don't get too concerned as we continue to introduce global functions and methods to objects. You have to memorize all these. Just be aware of them that they're there that they're available. And then when you need them, you just need a good reference to look them up and remind yourself how they're used. That's how a lot of programming happens.
So let's take a look at set timeout first to introduce higher order functions. I'm going to open sublime. Now I've already created a function here, very simple function greeting is simply logs out Hello there. Now set timeout. What it does is allows me to execute a function after a certain amount of time. So I specify the function I want to execute.
And I also specify the amount of time I want to wait. So set timeout requires two arguments. So let's go ahead and enter set timeout. Then inside of parentheses, I enter my two arguments. The first one is the function I want to execute. Then I place a comma And then the second one is the amount of time I want to wait before I execute that function.
And this is expressed in milliseconds. So 1000 would be one second, I'm going to enter 5000 for five seconds. So that we're able to see the amount of time passed before Hello there, logs to the console. two parameters and set timeout, the function and the amount of time. I'm gonna go ahead and save this. Let's display the page and open the console has not displayed yet.
And now hello there displays. Now I'm going to dock this to the bottom of the console and refresh this one more time. So you can see that it takes five seconds for it to display. And there it is. So that's what set timeout does. All right, jumping back to sublime.
Now this is not the normal process for passing functions into other functions. Usually what you'll see done in code that you'll look at, and what most JavaScript programmers do is they use an anonymous function. Well, what is anonymous function? Well, basically anonymous function means you define the function right there. So instead of defining the function up here, and then placing the variable as a part of the set timeout parameter, you define the function as a part of that parameter. Now, I gave you this way of doing it first, because I think this is easier to understand for most people to get started working with higher order functions, sometimes when you see a function definition inside another function, it can confuse you but don't let it there really is going to be no difference.
So let me do Another set timeout, set timeout. Now let's define the function function, parentheses, open and closing braces. And now inside that function, I can enter the code that I want to execute. I'm just going to do a console dot log for this one as well. This one, let's say Hello, everyone. And I'll put a semicolon at the end.
But notice for the set timeout function, right now, we only have one parameter, we're only passing in one argument now, and that's the function that we've defined. So now we need to come down here, place a comma and enter the second argument which is the amount of time I'm going to enter seven seconds on that So we should see hello there printed after five seconds, then Hello everyone after seven seconds. Now before we execute this, these are structured a bit differently, but they accomplish the same thing. Up here I define the function first and then I called it inside the set timeout function. Here, I defined the function that I needed to call as a part of the argument that I'm passing to set timeout. So here's the function.
And this is called an anonymous function because it has no name. We don't use a name when we create an anonymous function. Now technically, the other function is an anonymous function as well. It has no name either is simply assigned to a variable greeting. And then we use that variable to pass the function to the set timeout function. Alright, let me save that.
Jump out, refresh. After five seconds, we should see Hello there. And then two more seconds. Hello, everyone. So we've accomplished two things, we've introduced higher order functions were passing a function into another function. And we've done it two different ways we define the function first pass it in, and we did it as an anonymous function.
This is what you will see with most experienced JavaScript programmers anonymous functions. If you feel more comfortable with this method, and go ahead and start using that method for now. All right, we're going to do one more global function and that's set interval. The only difference between set interval and set timeout set interval continues to call that function. It doesn't stop. We still have the time specification, but every time if, for example, we had five seconds, the first five seconds it would call That function five seconds later would call it again.
And we continue to do that until we called a global function clear interval and cleared out the ID associated with set interval. Okay, so what so set interval can continue to execute, set timeout only doesn't want. Alright, I'm going to remove this code. Let's create an example for set interval. First, I'm going to create a variable and set it equal to zero. Now I'm going to create another variable and this is going to be interval ID.
And I'm going to set that equal to set interval. And so interval ID is going to get an ID from set interval. And I'm going to use that ID to to control when I want to stop set interval. Now set interval I have the parentheses and then close it with an with a semi colon. Welcome back in the parentheses, I have two arguments I need to pass in one is the function and the other is the amount of time I'm going to do the function as an anonymous function. curly braces, now I can define the code that's inside the anonymous function.
I'm going to begin by logging i to the console. Then I'm going to increment i. Then I'm going to have an IF conditional. if i if i is greater than five, I'm going to call clear interval. This is the SR function to set interval. And I'm going to pass in to clear interval interval.
Interval ID. So what clear interval does is it stops calls that have been started by a sent set interval command and it does it for the inter will ID that I pass in. So I could have multiple set intervals. But the interval ID I pass in is the one that is going to clear. All right, so once i is greater than five, it will clear that, and so it will stop calling that function. This is going to be very similar to a loop is what we're going to see here.
But a loop is continually running, where this is based upon time. All right. Now, you may have noticed that we've defined our function. But look, we're still missing one more argument to set interval. And that's the amount of time I'm going to set that equal to 1000. Save that, jump out, refresh 012345 and then it stops.
Clear interval stopped. Okay, so once again, set interval very similar to set timeout, except it continues to execute, and it also returns an ID. And then you can use that ID to stop it using clear interval. We also used an anonymous function. That was the first argument that we passed into set interval. The second argument was the amount of time so that is higher order functions that is set interval and set timeout.
Let's continue with the next topic.