function x() {
console.log('x');
}
x(); // Works even though it's above the declaration
function x() {
console.log('x');
}
if (someCondition) {
function foo() { // <===== HERE THERE
} // <===== BE DRAGONS
}
"use strict";
if (someCondition) {
foo(); // Works just fine
function foo() {
}
}
console.log(typeof foo); // "undefined" (`foo` is not in scope here
// because it's not in the same block)
var y = function () {
console.log('y');
};
名称函数表达式
var z = function w() {
console.log('zw')
};
var z = function w() {
console.log(typeof w); // "function"
};
console.log(typeof w); // "undefined"
配件功能启动器(ES5+)
var obj = {
value: 0,
get f() {
return this.value;
},
set f(v) {
this.value = v;
}
};
console.log(obj.f); // 0
console.log(typeof obj.f); // "number"
您还可以使用 Object.defineProperty、Object.defineProperties 和 Object.create 更不熟悉的第二个论点创建附件功能。
Arrow 功能表达式(ES2015+)
var a = [1, 2, 3];
var b = a.map(n => n * 2);
console.log(b.join(", ")); // 2, 4, 6
看到 n => n * 2 隐藏在地图() 呼叫? 这是一个函数。
关于箭头功能的一些事情:
他們沒有自己的這一點. 相反,他們關閉了他們所定義的背景的這一點. (他們也關閉了論點,在相關的情況下,超級.) 這意味著他們內在的這一點是相同的這一點,在那裡他們是創造的,並且不能改變。
var a = [1, 2, 3];
var b = a.map((n, i) => n * i);
console.log(b.join(", ")); // 0, 2, 6
如果您正在做一个单一表达式以上,请使用 {} 和一个明确的回报(如果您需要返回值),如正常:
var a = [
{first: "Joe", last: "Bloggs"},
{first: "Albert", last: "Bloggs"},
{first: "Mary", last: "Albright"}
];
a = a.sort((a, b) => {
var rv = a.last.localeCompare(b.last);
if (rv === 0) {
rv = a.first.localeCompare(b.first);
}
return rv;
});
console.log(JSON.stringify(a));
对象初步化方法宣言(ES2015+)
var o = {
foo() {
}
};
var o = {
foo: function foo() {
}
};
ES2015为我们提供类合成,包括声明的建筑师和方法:
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
getFullName() {
return this.firstName + " " + this.lastName;
}
}