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

3.2 KiB

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

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

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);
}