JavaScript 是一门动态语言,支持面向对象、命令式和声明式(例如函数式编程)等多种风格。
在 JavaScript 中,给名字赋值主要有几种方式,可以用变量,也可以用常量。 在 Exercism 上,变量始终使用 camelCase 写法,常量使用 SCREAMING_SNAKE_CASE 写法。 这方面没有官方规定可循,不同的公司和组织也各有自己的风格指南。 你完全可以按自己喜欢的方式命名变量。 按照练习中准备好的方式书写,好处是它们在网页界面和大多数 IDE 中会有不同的高亮显示。
JavaScript 中的变量可以使用 const、let 或 var 关键字来定义。
使用 let 或 var 时,变量在其生命周期内可以引用不同的值。
例如,用赋值运算符=可以多次定义和重新赋值 myFirstVariable:
let myFirstVariable = 1;
myFirstVariable = 'Some string';
myFirstVariable = new SomeComplexClass();
与 let 和 var 不同,用 const 定义的变量只能赋值一次。
在 JavaScript 中,常量就是这样定义的。
const MY_FIRST_CONSTANT = 10;
// Can not be re-assigned.
MY_FIRST_CONSTANT = 20;
// => TypeError: Assignment to constant variable.
💡 在后续的概念练习中,我们会探讨并解释_常量_赋值、_常量_绑定与_常量_值之间的区别。
在 JavaScript 中,功能单元被封装在_函数_里,属于同一组的函数通常放在同一个文件中。
这些函数有形参(因此可以接收实参),并且可以用 return 关键字来_返回_一个值。
函数通过 () 语法来调用。
function add(num1, num2) {
return num1 + num2;
}
add(1, 3);
// => 4
在这个例子中,函数名是 add。
它有两个形参,num1 和 num2。
它返回一个值,也就是表达式 num1 + num2 的结果。
接着,函数 add 用两个实参来_调用_:1 和 3。
函数的结果,也就是返回值,是 4。
💡 在 JavaScript 中,声明函数的方式_有很多_种。
其中一些方式看起来和用 function 关键字不一样。
本学习路径会尝试逐步介绍它们,但如果你已经了解,可以随意使用其中任何一种。
大多数情况下,用哪一种都没有好坏之分。
要让一个function、常量或变量在_其他文件_中可用,需要用 export 关键字将它们导出。
然后另一个文件可以用 import 关键字来导入这些内容。
这也被称为模块系统。
所有测试的工作方式就是一个很好的例子。
每个练习都至少有一个文件,例如 lasagna.js,其中包含_实现_。
实现_会从该文件里 export 出去,从而可以在另一个文件中导入。
此外至少还有一个其他文件,例如 lasagna.spec.js,其中包含_测试。
这个文件会 import 那些公开的(即被 export 的)实体,以便测试实现:
// file.js
export const MY_VALUE = 10;
export function add(num1, num2) {
return num1 + num2;
}
// file.spec.js
import { MY_VALUE, add } from './file';
add(MY_VALUE, 5);
// => 15
Lucian 的女朋友正在回家的路上,而他还没做好他们的周年纪念晚餐!
在这个练习中,你将编写一些代码,帮助 Lucian 按照他最喜欢的食谱做出一份美味的千层面。
这个练习共有四个任务,都与做千层面所花的时间有关。
定义常量 EXPECTED_MINUTES_IN_OVEN,表示千层面应该在烤箱里烤多少分钟。它必须被导出。根据这本食谱,预期的烤箱时间是 40 分钟。
实现 remainingMinutesInOven 函数,它接收千层面已经在烤箱里烤了多少分钟作为_形参_,并_返回_千层面还需要在烤箱里烤多少分钟,这个值根据上一个任务中的**预期烤箱时间(分钟)**计算得出。
remainingMinutesInOven(30);
// => 10
实现 preparationTimeInMinutes 函数,它接收你往千层面里加了几层作为_形参_,并_返回_你准备千层面花了多少分钟,假设每加一层需要 2 分钟。
preparationTimeInMinutes(2);
// => 4
实现 totalTimeInMinutes 函数,它接收_两个形参_:numberOfLayers 是你往千层面里加的层数,actualMinutesInOven 是千层面已经在烤箱里烤了多少分钟。这个函数应该_返回_你烹饪千层面总共花了多少分钟,也就是准备时间(分钟)与千层面此刻在烤箱里所花分钟数之和。
totalTimeInMinutes(3, 20);
// => 26