diff --git a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c6541c82551f95e765ab.md b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c6541c82551f95e765ab.md index c10f76746ac..0fd582caed5 100644 --- a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c6541c82551f95e765ab.md +++ b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c6541c82551f95e765ab.md @@ -7,7 +7,7 @@ dashedName: step-55 # --description-- -Variables can also be declared inside a function. These variables are considered to be in the local scope, or block scope. A variable declared inside a function can only be used inside that function. If you try to access it outside of the function, you will either get `undefined` or an error. +Variables can also be declared inside a function. These variables are considered to be in the local scope, or block scope. A variable declared inside a function can only be used inside that function. If you try to access it outside of the function, you get a reference error. To see this in action, use `const` to declare a `test` variable in your `padRow` function. Initialise it with the value `"Testing"`. @@ -27,6 +27,13 @@ You should initialise `test` with the value `"Testing"`. Don't forget the semi-c assert.match(padRow.toString(), /var\s+test\s*=\s*('|")Testing\1;/) ``` +Your `test` variable should come before your `return` keyword. + +```js +const str = padRow.toString(); +assert.isBelow(str.indexOf("test"), str.indexOf("return")); +``` + # --seed-- ## --seed-contents-- @@ -38,8 +45,8 @@ const rows = []; --fcc-editable-region-- function padRow(name) { - return character + name; + return character + name; } --fcc-editable-region-- diff --git a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c71600966a2191d3a64a.md b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c71600966a2191d3a64a.md index 5f22285f429..fde1c34970f 100644 --- a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c71600966a2191d3a64a.md +++ b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c71600966a2191d3a64a.md @@ -7,17 +7,31 @@ dashedName: step-56 # --description-- -There is a bit of a problem, here. Your `test` declaration is currently after your `return` statement. An important thing to know about the `return` keyword is that it does not just define a value to be returned from your function, it also stops the execution of your function code. This means that any code after a `return` statement will not run. +Values returned out of a function are used by calling the function. You can use the function call directly as the value it returns, or capture the returned value in a variable. This way, you can use the value assigned to a locally scoped variable, outside the function it was created in. + +```js +function getName() { + const name = "Camper cat"; + return name; +} + +console.log(getName()); // "Camper cat" + +const capturedReturnValue = getName(); +console.log(capturedReturnValue); // "Camper cat" + +console.log(name); // reference error +``` + +To use your `"Testing"` value, return it out of the `padRow` function by updating your `return` statement to return only the `test` variable. -Move your `test` initialization to the line above your `return` statement. # --hints-- -Your `test` variable should come before your `return` keyword. +Your `padRow` function should return the `test` variable. ```js -const str = padRow.toString(); -assert.isBelow(str.indexOf("test"), str.indexOf("return")); +assert.equal(padRow("Naomi"), "Testing"); ``` # --seed-- @@ -31,9 +45,8 @@ const rows = []; --fcc-editable-region-- function padRow(name) { - + const test = "Testing"; return character + name; - const test = "Testing"; } --fcc-editable-region-- diff --git a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c77d50636722e5b6be17.md b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c77d50636722e5b6be17.md index a808f73d875..ada47626994 100644 --- a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c77d50636722e5b6be17.md +++ b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c77d50636722e5b6be17.md @@ -7,9 +7,13 @@ dashedName: step-57 # --description-- -If you try to add a `console.log(test)` call below your `padRow` function, you would see an error. This is because `test` is defined in the local scope, meaning you cannot access it in the global scope (outside of the `padRow` function). +Below the `return` statement, log the string `"This works!"` to the console. -Returning a value from a function brings that value into the scope where the function was called. To bring your `"Testing"` value from the `padRow` function into the global scope, update your `return` statement to return only the `test` variable. +After doing that, you will see that the string `"This works!"` does not display in the console, and the `console.log("This works!")` line is greyed out. + +Copy the console log and paste it above the `return` statement. Now, the string `"This works!"` should appear in the console. + +An important thing to know about the `return` keyword is that it does not just define a value to be returned from your function, it also stops the execution of your code inside a function or a block statement. This means any code after a `return` statement will not run. # --hints-- @@ -19,6 +23,18 @@ Your `padRow` function should return the `test` variable. assert.equal(padRow("Naomi"), "Testing"); ``` +Your first `console.log` should come after your `return` keyword. + +```js +assert.match(padRow.toString(), /return\s+test;\s+console.log\s*\(\s*('|"|`)This\s+works!\1\);/); +``` + +Your second `console.log` should come before your `return` keyword. + +```js +assert.match(padRow.toString(), /console.log\s*\(\s*('|"|`)This\s+works!\1\);\s+return\s+test;/); +``` + # --seed-- ## --seed-contents-- @@ -31,7 +47,9 @@ const rows = []; --fcc-editable-region-- function padRow(name) { const test = "Testing"; - return character + name; + + return test; + } --fcc-editable-region-- diff --git a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c83b52583e245a079217.md b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c83b52583e245a079217.md index 30f63049ec4..485d5a2a634 100644 --- a/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c83b52583e245a079217.md +++ b/curriculum/challenges/english/15-javascript-algorithms-and-data-structures-22/learn-introductory-javascript-by-building-a-pyramid-generator/6610c83b52583e245a079217.md @@ -11,6 +11,7 @@ Now your `call` variable has the value `"Testing"`. But your function is no long Remove the `name` parameter from your function declaration, then remove your `"CamperChan"` string from the `padRow` call. +Also, remove both `console.log` from the `padRow` function. # --hints-- Your `padRow` function should not have a `name` parameter. @@ -31,6 +32,18 @@ You should still call your `padRow` function. assert.lengthOf(code.match(/padRow\(\)/g), 2); ``` +You should not have a `console.log` before your `return` keyword. + +```js +assert.notMatch(padRow.toString(), /console.log\s*\(\s*('|"|`)This\s+works!\1\);\s+return\s+test;/); +``` + +You should not have a `console.log` after your `return` keyword. + +```js +assert.notMatch(padRow.toString(), /return\s+test;\s+console.log\s*\(\s*('|"|`)This\s+works!\1\);/); +``` + # --seed-- ## --seed-contents-- @@ -43,7 +56,9 @@ const rows = []; --fcc-editable-region-- function padRow(name) { const test = "Testing"; + console.log("This works!"); return test; + console.log("This works!"); } const call = padRow("CamperChan"); console.log(call);