Fcuntion
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
上述abs()
函数的定义如下:
function
指出这是一个函数定义;abs
是函数的名称;(x)
括号内列出函数的参数,多个参数以,
分隔;{ ... }
之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句。
请注意,函数体内部的语句在执行时,一旦执行到return
时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
如果没有return
语句,函数执行完毕后也会返回结果,只是结果为undefined
。
由于JavaScript的函数也是一个对象,上述定义的
abs()
函数实际上是一个函数对象,而函数名abs
可以视为指向该函数的变量。引用自廖雪峰网站
不难看出,这里的abs
作为函数名,它也是一个变量名。
显然可以得知,**function
**也可以有前文所说三个变量相同的功能:声明变量。
注意,
function
声明会提升,也会初始化。
import
import { 导出的变量 } from '单独细小的模块';
导入模块。在大型项目里,我们经常将业务划分为细小的模块,在需要的地方去进行调用。
模块内部会导出一个个变量,在使用import
时,这里“导出的变量”其实就是“单独细小的模块”内部导出的变量。
但是不可否认,import
的作用当中包含了声明一个变量。
注意,
import
声明会提升,也会初始化。
class
首先,我们要确定,class
类是什么?
这个直接打印一下就好了
class User {
constructor(name) { this.name = name; }
}
console.log(typeof User); // => function;
从结果上看,JavaScript
中的class
类是一个函数。
在这个类里面,
class
构造做了这个事情:创建一个名为User
的函数,该函数成为类声明的结果。
那么可以确定,class
也具备声明一个变量的功能。
let p = new Rectangle(); // ReferenceError
class Rectangle {}
经过试验,在class
声明前调用会直接报错,包括打印。
注意,
class
声明不会提升,没有初始化。
Incredible results
结果有点难以置信,在JavaScript
声明变量领域当中,开发者总是认为只有let、const、let
这三种。
function、import、class
虽然在开发过程当中随手可得,不会那么刻意的去关注;但很明显,现在开发者们声明变量的方式不再是认知当中是三种了,包含es6
,JavaScript
声明变量的方式应该是6种。
Q.E.D.