freeCodeCamp/curriculum/challenges/english/02-javascript-algorithms-an.../basic-javascript/global-scope-and-functions....

3.5 KiB

id title challengeType videoUrl
56533eb9ac21ba0edf2244be Global Scope and Functions 1 https://scrimba.com/c/cQM7mCN

Description

In JavaScript, scope refers to the visibility of variables. Variables which are defined outside of a function block have Global scope. This means, they can be seen everywhere in your JavaScript code. Variables which are used without the var keyword are automatically created in the global scope. This can create unintended consequences elsewhere in your code or when running a function again. You should always declare your variables with var.

Instructions

Using var, declare a global variable myGlobal outside of any function. Initialize it with a value of 10. Inside function fun1, assign 5 to oopsGlobal without using the var keyword.

Tests

tests:
  - text: <code>myGlobal</code> should be defined
    testString: assert(typeof myGlobal != "undefined", '<code>myGlobal</code> should be defined');
  - text: <code>myGlobal</code> should have a value of <code>10</code>
    testString: assert(myGlobal === 10, '<code>myGlobal</code> should have a value of <code>10</code>');
  - text: <code>myGlobal</code> should be declared using the <code>var</code> keyword
    testString: assert(/var\s+myGlobal/.test(code), '<code>myGlobal</code> should be declared using the <code>var</code> keyword');
  - text: <code>oopsGlobal</code> should be a global variable and have a value of <code>5</code>
    testString: assert(typeof oopsGlobal != "undefined" && oopsGlobal === 5, '<code>oopsGlobal</code> should be a global variable and have a value of <code>5</code>');

Challenge Seed

// Declare your variable here


function fun1() {
  // Assign 5 to oopsGlobal Here

}

// Only change code above this line
function fun2() {
  var output = "";
  if (typeof myGlobal != "undefined") {
    output += "myGlobal: " + myGlobal;
  }
  if (typeof oopsGlobal != "undefined") {
    output += " oopsGlobal: " + oopsGlobal;
  }
  console.log(output);
}

Before Test

var logOutput = "";
var originalConsole = console
function capture() {
    var nativeLog = console.log;
    console.log = function (message) {
        logOutput = message;
        if(nativeLog.apply) {
          nativeLog.apply(originalConsole, arguments);
        } else {
          var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');
          nativeLog(nativeMsg);
        }
    };
}

function uncapture() {
  console.log = originalConsole.log;
}
var oopsGlobal;
capture();

After Test

fun1();
fun2();
uncapture();
(function() { return logOutput || "console.log never called"; })();

Solution

// Declare your variable here
var myGlobal = 10;

function fun1() {
  // Assign 5 to oopsGlobal Here
  oopsGlobal = 5;
}

// Only change code above this line
function fun2() {
  var output = "";
  if(typeof myGlobal != "undefined") {
    output += "myGlobal: " + myGlobal;
  }
  if(typeof oopsGlobal != "undefined") {
    output += " oopsGlobal: " + oopsGlobal;
  }
  console.log(output);
}