ECMAScript中函数(Function)类型是一种特殊的对象,函数作为对象拥有一些特殊的属性和方法,比如call、apply、length、prototype等。
定义函数
定义函数有两种常见的方式:
函数声明
函数声明使用function
关键字,后跟函数名和一对圆括号。函数体被包含在一对花括号内。例如:
function sum(num1, num2) {
return num1 + num2;
}
函数表达式
函数表达式通常使用变量来保存函数。函数名是可选的,如果命名了就是命名函数表达式,不命名就是匿名函数表达式。例如:
var sum = function(num1, num2) {
return num1 + num2;
};
函数调用
函数可以通过函数名加括号的方式调用,括号内可以传入任意个数的参数,参数之间用逗号隔开。例如:
var result = sum(1, 2);
console.log(result); // 3
var result2 = sum(1, 2, 3);
console.log(result2); // 3
函数也可以通过call
或apply
方法来调用,这两种方式可以控制函数内部this
的指向。例如:
var person = {
name: 'John',
sayHi: function() {
console.log('Hi, my name is ' + this.name);
}
};
person.sayHi(); // Hi, my name is John
var person2 = {
name: 'Mike'
};
person.sayHi.call(person2); // Hi, my name is Mike
person.sayHi.apply(person2); // Hi, my name is Mike
函数参数
函数的参数可以是任意个数,参数之间用逗号隔开。每个参数可以有默认值,可通过arguments
对象来获取函数传入的参数。例如:
function sum() {
var result = 0;
var i = 0;
while (i < arguments.length) {
result += arguments[i];
i++;
}
return result;
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4, 5)); // 15
console.log(sum()); // 0
function multiply(num1, num2 = 1) {
return num1 * num2;
}
console.log(multiply(3)); // 3
console.log(multiply(3, 4)); // 12
函数作用域
变量的作用域是指变量在程序中有效的范围。函数作用域与全局作用域是相对的概念。函数内部的变量只能在函数内部访问,函数外部的变量不能在函数内部访问。但是函数内部可以访问函数外部的变量,称为“闭包”。例如:
var a = 10;
function foo() {
var b = 20;
console.log(a); // 10
console.log(b); // 20
}
foo();
console.log(a); // 10
console.log(b); // Uncaught ReferenceError: b is not defined
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
函数返回值
函数可以有返回值,使用return
语句可以返回任意类型的值,如果没有返回语句,则默认返回undefined
。例如:
function getUserInfo(id) {
// some logic here
return {
name: 'John',
age: 20,
gender: 'male'
};
}
var userInfo = getUserInfo(123);
console.log(userInfo); // {"name":"John","age":20,"gender":"male"}
function isEven(num) {
return num % 2 === 0;
}
console.log(isEven(1)); // false
console.log(isEven(2)); // true
以上就是ECMAScript中函数(Function)类型的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ECMAScript中函数function类型 - Python技术站