函数
函数定义和调用
function abs1(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
var abs2 = function (x) {
if (typeof x !== 'number') {
throw 'Not a number';
}
if (x >= 0) {
return x;
} else {
return -x;
}
};
abs1(10);
abs1(-9);
abs1(10, 'blablabla');
abs1(-9, 'haha', 'hehe', null);
abs1();
abs2();
function foo1(a, b, c) {
if (arguments.length === 2) {
c = b;
b = null;
}
}
foo1(1, 2, 3);
foo1(1, 3);
function foo2(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo2(1, 2, 3, 4, 5);
foo2(1);
变量作用域与解构赋值
function foo() {
var x = 1;
x = x + 1;
}
function bar() {
var x = 'A';
x = x + 'B';
}
function foo1() {
var x = 1;
var fooX = 1;
function bar1() {
var x = 2;
var barY = x + fooX;
}
var fooY = barY + 1;
}
function foo2() {
var x = 'Hello, ' + y;
console.log(x);
var y = 'Bob';
}
function foo3() {
var
x = 1,
y = x + 1,
z, i;
for (i = 0; i < 100; i++) {
}
}
function foo4() {
console.log('foo');
}
foo4();
var MYAPP = {};
MYAPP.name = 'myapp';
MYAPP.version = 1.0;
MYAPP.foo = function () {
return 'foo';
};
function foo5() {
for (var i1 = 0; i1 < 100; i1++) {
}
i1 += 100;
var sum = 0;
for (let i2 = 0; i < 100; i++) {
sum += i2;
}
i2 += 1;
}
var PI1 = 3.14;
const PI2 = 3.14;
PI2;
var [x, y, z] = ['hello', 'JavaScript', 'ES6'];
var {name, age, passport: id, single = true} = {
name: '小明',
age: 20,
passport: 'G-12345678',
};
var x=1, y=2;
[x, y] = [y, x]
var {hostname:domain, pathname:path} = location;
function buildDate({year, month, day, hour=0, minute=0, second=0}) {
return new Date(year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second);
}
buildDate({ year: 2017, month: 1, day: 1 });
方法
var xiaoming = {
name: '小明',
birth: 1990,
age1: function () {
var y = new Date().getFullYear();
return y - this.birth;
},
age2: getAge
};
function getAge() {
var y = new Date().getFullYear();
return y - this.birth;
}
xiaoming.age1;
xiaoming.age1();
xiaoming.age2();
getAge();
getAge.apply(xiaoming, [1, 2, 3]);
getAge.call(xiaoming, 1, 2, 3);
var count = 0;
var oldParseInt = parseInt;
parseInt = function () {
count += 1;
return oldParseInt.apply(null, arguments);
};
parseInt('10');
parseInt('20');
parseInt('30');
console.log('count = ' + count);
高阶函数
function add(x, y, f) {
return f(x) + f(y);
}
var x = add(-5, 6, Math.abs);
console.log(x);
var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var result1 = arr1.map(function (x) {
return x * x;
});
result1;
var arr2 = [1, 3, 5, 7, 9];
var result2 = arr2.reduce(function (x, y) {
return x + y;
});
result2;
var arr3 = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
var result3 = arr3.filter(function (e, i, self) {
return self.indexOf(e) === i;
});
result3;
var arr4 = [10, 20, 1, 2];
arr4.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});
arr4;
var arr = ['Apple', 'pear', 'orange'];
var result5 = arr.every(function (s) {
return s.length > 0;
});
result5;
var result6 = arr.find(function (s) {
return s.length > 0;
});
result6;
var result7 = arr.findIndex(function (s) {
return s.length > 10;
});
result7;
arr.forEach(function (e) {
console.log(e);
});
闭包
function lazy_sum(arr) {
var sum = function () {
return arr.reduce(function (x, y) {
return x + y;
});
}
return sum;
}
var f = lazy_sum([1, 2, 3, 4, 5]);
f();
function count() {
var arr = [];
for (var i = 1; i <= 3; i++) {
arr.push(function () {
return i * i;
});
}
return arr;
}
var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];
f1();
f2();
f3();
function count() {
var arr = [];
for (var i=1; i<=3; i++) {
arr.push((function (n) {
return function () {
return n * n;
}
})(i));
}
return arr;
}
var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];
f1();
f2();
f3();
function make_pow(n) {
return function (x) {
return Math.pow(x, n);
}
}
var pow2 = make_pow(2);
var pow3 = make_pow(3);
console.log(pow2(5));
console.log(pow3(7));
箭头函数
x => x * x;
x => {
if (x > 0) {
return x * x;
} else {
return -x * x;
}
};
(x, y) => x * x + y * y;
() => 3.14;
x => ({ foo: x });
var obj = {
birth: 1990,
getAge: function () {
var b = this.birth;
var fn = () => new Date().getFullYear() - this.birth;
return fn();
}
};
console.log(obj.getAge());;
console.log()
generator
function* foo(x) {
yield x + 1;
yield x + 2;
return x + 3;
}
var f = foo(0);
f.next();
f.next();
f.next();
f.next();
for (var x of foo(0)) {
console.log(x);
}