回想一下,你学过的编程语言是如何跑起来的。是不是经过编译器吭哧吭哧地编译成可执行文件然后再执行?
但是 JavaScript 比较特殊。JavaScript 既可以在浏览器中执行,也可以在服务端执行,还可以在移动App中执行,这一切其实归功于 JavaScript 引擎,比如 V8、JavaScriptCore。V8 引擎被应用于谷歌浏览器 Chrome 和 Node.js 。我们看一段官网关于V8的介绍:
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows 7 or later, macOS 10.12+, and Linux systems that use x64, IA-32, ARM, or MIPS processors. V8 can run standalone, or can be embedded into any C++ application.
大体意思就是说 V8 很牛逼,是一个开源项目,使用 C++ 实现了 JavaScript 和 WebAssembly,应用于 Windows、macOS、Linux 系统,Chrome 和 Node.js 都是采用它实现的。
我们使用 V8 主要用来执行 JavaScript 代码,先创建一个 js 文件 day1.js,代码如下:
// 创建一个变量 name
let name = '前端小课';
// 打印变量 name 的值
console.log(name);
// 定义一个函数,并把这个函数赋值给变量 call
let call = function () {
console.log('call fun: ', name);
};
// 调用函数
call();
既然 Chrome 浏览器中集成了 V8,我们用它来执行一下上面这段 JavaScript 代码。在浏览器中执行 JavaScript,需要把 JavaScript 代码以文件或者源代码的方式嵌入到 script 标签中:
Day1
通过浏览器打开上面的 HTML 页面,JavaScript 代码便会执行。
不仅如此,通过 Node.js 也可以执行上面的 JavaScript 代码,能通过 node 执行 JavaScript 代码的前提是你已经安装了 Node.js,在前面的课程有关于 Node.js 的使用。在 day1.js 文件目录下输入命令 node + 文件名:
➜ node day1.js
前端小课
call fun: 前端小课
掌握了如何执行 JavaScript 代码,接下来我们需要看一看 JavaScript 中的函数。
JavaScript 通过 function 关键字定义函数,定义函数名为 sum 的函数:
function sum(a, b) {
return a + b;
}
也可以通过函数表达式定义函数,下面定义的函数未指定名字:
let sub = function (a, b) {
return a - b;
};
函数其实是「对象」,每一个函数实际上是 Function 的实例,函数有自己方法和属性。这一点与其它语言有很大的不同。打印 sub:
console.log(sub);
// [Function: sub]
通过 Function 创建一个函数,通过这种方式只是说明函数是 Function 的实例,不推荐使用。
let sub2 = new Function('a', 'b', 'return a - b');
// 2
console.log(sub2(8, 6));
函数可以作为函数参数传递,也可以作为函数返回值。
function invoke(a, b, fun) {
if (!a || !b) {
return;
}
return fun(a, b);
}
let ret = invoke(5, 2, function (a, b) {
return a + b;
});
函数有一个内部参数 arguments,它保存了函数调用时的所有参数,它不是一个数组。
function kill(a, b) {
// { '0': 3, '1': 2 }
console.log(arguments);
return a * a - b;
}
kill(3, 2);
总结
本节内容主要讲了如何执行 JavaScript 以及 JavaScript 中函数的使用。在每一门编程语言中函数都扮演了非常重要的角色,JavaScript 也不例外,使用函数能做的事情还有很多比如闭包、面向对象。大家加油。
今天的打卡指令:
1.聊一聊 JavaScript 中的函数都能做哪些有意思的事情?
2.JavaScript 中的原型是谁的属性?
3.直接打卡。
推荐阅读:
被招安的 JavaScript ,取名为 ECMAScript
程序原本 — 推荐3本免费电子书
第四阶段 - 系统深入学习 JavaScript