What impact does function declaration have on hoisting?

The following two code snippets produce different outputs, even though the inner function is not being called.

var a = 1;
function foo(){
  a= 2;
}
foo();
console.log(a);   // 2

However, when I add a function with the same name, the output changes. Even though I am not calling the a()

var a = 1;
function foo(){
  a= 2;
  function a(){
    a = 3;
  }
}
foo();
console.log(a);   // 1

Shouldn't it be 2? Why does it log 1?

Answer №1

When a variable named a is declared inside the function foo, any assignments to variables also named a within the foo function will refer to that local identifier, not any potential outer variables with the same name. This concept can be illustrated as follows:

var a = 1;
function foo(){
  // an identifier named `a` is initialized in this scope
  var a;
  // function declarations are hoisted
  a = function a(){
    a = 3;
  }
  // assignment to the local identifier `a`
  a= 2;
}
foo();
console.log(a);   // 1

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Google Maps GeoCoding consistently relies on the language settings of the browser in use

I have implemented the Google AJAX API loader to retrieve information in German by loading the maps API using this code: google.load("maps", "2", {language : "de"}); Despite trying variations such as deu, ger, de, de_DE, and ...

"Transmitting a message with socket.io upon establishing connection

Currently getting the hang of socket.io and giving it a try. I have a straightforward app where clicking the display button shows an image on the screen in real time. I have a couple of questions. Firstly, my main concern is regarding the synchronization ...

Node.js HTTP requests abruptly ceasing after a few seconds

Everything is running smoothly with the code as I initiate the request. It progresses and launches multiple requests consecutively, just as intended. However, after a few moments, the script abruptly halts—this is definitely not the desired outcome. I ...

Update search results when performing a new search on a web application (without using jQuery)

My simple web app interacts with an API to retrieve search results from a database and utilizes ajax to insert them into an empty ul element on the page (employing JSONP for cross-domain requests). I am struggling to achieve this functionality using plain ...

The find function within $(this) is malfunctioning

I'm having issues with displaying/hiding content when clicking on a table row. Here is the simplified code snippet: HTML: <table> <tr onclick="showDetails()"> <td>Some text <br> <span class="hiddenC ...

I am facing difficulties in installing the necessary node modules for my Angular project

After attempting to run npm install, an error message is displayed towards the end: error syscall unlink 22396 error The operation was rejected by your operating system. 22396 error It's possible that the file was already in use (by a text editor or ...

Enhancing audio control features using HTML and JavaScript

After utilizing various suggestions, I have successfully created a basic audio slider that starts playing sound (at zero volume) when clicked by the user. They can then adjust the volume as needed. My only challenge is that the volume adjustment only occu ...

Is there any way to remove the two default aspNetHidden Divs in asp.net web forms?

After creating an empty webform page in asp.net, the generated code looks like this: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Threetier.WebForm1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org ...

Incorporating dynamic data binding using AngularJS in a span tag

In my view, I am using this Angular expression: <span ng-if="{{list.StoreList ? (list.StoreList.length ' Products)' : '(0 Products)'}}"> </span> The purpose is to display the count of items in StoreList if there are any, ...

What is the best way to obtain the output produced by a function when a button is clicked

When I click on a button, the desired action is to trigger a function that adds a new property inside an object within a large array of multiple objects. This function then eventually returns a new array. How can I access and utilize this new array? I am ...

Simultaneously scroll through various div elements

Is there a way to synchronize scrolling across multiple div elements? I want the scroll position in one div to be reflected in all other divs. Since I am creating the div dynamically, I am using the function document.getElementsByClassName sub-category-co ...

What steps can be taken to resolve the error message "Path must be a string. Received undefined" that is occurring in webpack4 with the copy-webpack-plugin?

I am currently working on setting up a separate file in webpack to handle the copying of static assets from the src folder to the web folder. Versions: node: 8.15.0 yarn: 1.13.0 webpack: 4.19.1 copy-webpack-plugin: 6.0.0 In my existing project structure, ...

Integrating specific data entries into a Sencha Touch store

I've been struggling with this issue for quite some time now. It may seem trivial, but I just can't seem to figure it out. My goal is to create a store and gradually populate it with records based on user interface actions. For example, clicking ...

Using Next.js with Firebase emulators

I've been struggling to configure Firebase's V9 emulators with Next.js, but I keep running into the same error message. See it here: https://i.stack.imgur.com/Uhq0A.png The current version of Firebase I'm using is 9.1.1. This is how my Fir ...

Ways to implement a filter pipe on a property within an array of objects with an unspecified value

Currently, I'm tackling a project in Angular 8 and my data consists of an array of objects with various values: let studentArray = [ { Name: 'Anu', Mark: 50, IsPassed: true }, { Name: 'Raj', Mark: 20, IsPassed: false }, { Na ...

Unpacking a mongoose record

During my project using mongoose, I encountered a issue. I am trying to retrieve all documents that contain a specific key and value pair role: USER. Although I am able to retrieve a list of documents, I am struggling to access the values of certain fields ...

Interacting with my Rails API through JavaScript requests

Exploring the world of Rails and diving into creating a basic rails-api. Currently facing an issue while trying to incorporate user addition to my model using a JavaScript request... Let's take a look at my HTML file named add-user.html: <script ...

Is it possible to submit two forms simultaneously using jQuery or AJAX?

My plan is to save 2 forms, with the first form providing the Foreign key for the second form. This is my attempt at saving this using JavaScript: $("#btnSave").click(function (e) { e.preventDefault(); $('#workForm').submit(); ...

The fetch() function is inundating my API with an overwhelming amount of requests

After implementing the following function to retrieve images from my API, I encountered an issue: function getImages() { console.log("Ignite"); fetch('https://api.itseternal.net/eternal/stats', { headers: { & ...

Exploring the functionalities of MongoDB through Populate, Aggregate, and Un

My user model contains the following data structure: { _id: object, name: string, quotes: [ { quote: string, createdAt: date } ], friends: [ { _id: object } ] (referring to the _id from the user model) } My goal is to extract and return the following ...