Function definition method
//函数定义方法:函数声明定义
function add(a, b) {return a + b;}
//函数定义方法:函数表达式定义
var add = function (a, b) {return a * b};
//函数定义方法:箭头函数定义 (IE11 或更早的版本不支持箭头函数。)
const x = (x, y) => x * y;
Since the calling function
//函数类型:自调用函数
格式:(函数对象)(函数参数)
//无参数
(function () {
var a = 1;
var b = 2;
return a + b
}
)();
//有参数
(function (a,b) {
return a + b
}
)(1,2);
Function parameter passing
- JS predetermined function definition not a parameter data type (function definition is dynamic)
- JS function does not pass the parameters type checking (passing function parameters are dynamic)
- JS function does not check the number of the received parameters (the number of parameters passed in the function not fixed)
//不会检查所接收参数的数量
//传递少于函数定义参数情况,未传入的参数默认为undefined
function add(x, y) {
//x == 1
//y == undefined
if (y === undefined) {
y = 2;
}
//y = 2
}
add(1)
//传递多于函数定义参数情况,可以使用arguments对象获取
function add(x, y) {
//x == 1
//y == 2
//arguments[2] == 3
if (y === undefined) {
y = 1;
}
if (arguments[2] === 3) {
var z = 1;
}
//y == 2
//z == 1
}
add(1,2,3)
Call the method functions
//函数名调用
function add(a, b) {
return a * b;
}
add(1, 2);
var add = function (a, b) {return a * b};
add(1, 2);
//通过全局对象window调用
function add(a, b) {
return a * b;
}
window.add(1, 2);
//作为对象方法调用
var math = {
var a = 1;
var b = 2;
add:function(){
return a + b;
}
}
math.add();// 等于3
var math = {
add:function(a,b){
return a + b;
}
}
math.add(1,2);// 等于3
//对象call或apply方法传入对象调用函数
var math = {
var a = 0;
var b = 1;
add: function() {
return this.a + this.b;
}
max:function(a,b){
return
}
min:function(a,b){
return
}
}
var mathSubI = {
var a = 1;
var b = 2;
add: function() {
return this.a + this.b;
}
max:function(a,b){
if ( a > b ){
return a;
}
else {
return b;
}
}
}
var mathSubII = {
var a = 2;
var b = 3;
add: function() {
return a + b;
}
min:function(a,b){
if ( a < b ){
return a;
}
else {
return b;
}
}
}
//Call方法(多态实现)
math.add.call(mathI); // 将返回3
math.add.call(mathII); // 将返回5
math.max.call(mathI,1,2); // 将返回2
math.min.call(mathII,1,2); // 将返回1
//Apply方法(多态实现)
math.add.apply(mathI); // 将返回3
math.add.apply(mathII); // 将返回5
math.max.apply(mathI,[1,2]); // 将返回2
math.min.apply(mathII,[1,2]); // 将返回1
/*
call() 和 apply() 之间的区别
不同之处是:
call() 方法分别接受参数。
apply() 方法接受数组形式的参数。
如果要使用数组而不是参数列表,则 apply() 方法非常方便。
*/
Closure
闭包写法:
var math= (
function () {
var name = 'Bill';
var age = 22;
var tel = '123456789'
function call(){
return counter += 1;
}
return call()
}
)();