函数
几个要点:
a).函数是javascript中的一等公民 (重要性) b).函数是一个对象 c).函数定义了一个独立的变量作用域
定义方式
a)命名函数:
rush:js;">
// 全局的命名函数
function add(x,y) {
return x + y;
}
console.info(add(100,200)); //300
b)匿名函数:
rush:js;">
var func = function (x,y) {
return x + y;
}
console.info(func(5,2)); //7
rush:js;">
console.info(
function (x,y) {
return x + y;
}(100,200) //立即调用
);
命名函数可以先使用,再定义
rush:js;">
console.info(sum(10,10));
function sum(num1,num2) {
return num1 + num2;
}
匿名函数必须先定义,再使用
rush:js;">
//console.info(sumFunc(10,10)); //Uncaught TypeError: Property 'sumFunc' of object [object Object] is not a function
var sumFunc = function (num1,num2) {
return num1 + num2;
};
console.info(sumFunc(10,10));
函数返回值:
用return 生成返回值.如没有return ,则函数返回undefined
rush:js;">
function func() {
}
console.info(func()); //undefined
function func2() {
return; //空的返回语句
}
console.info(func2()); //undefined
return里藏着的坑:
rush:js;">
var func = function (x,y) {
var sum = x + y;
return {
value : sum
}
}
这么写没有问题: 调用 func(5,5) 返回的是 Object {value: 10}
然而:
rush:js;">
var func = function (x,y) {
var sum = x + y;
return
{
value: sum
};
}
console.info(func(5,5)); //undefined
return 后面跟着个回车换行的话, 调用 func(5,5) 显示的是 undefined 编辑器帮我们在return后加了个分号; 然而在这情况下并没有什么卵用。
函数即对象:
rush:js;">
function add(x,200)); //300
var other = add; //other和add引用同一函数对象
console.info(other(300,400)); //700
console.info(typeof other); //function
console.info(add === other); //true
嵌套定义的函数:
rush:js;">
function outerFunc(a,b) {
function innerFunc(x) {
return x * x;
}
return Math.sqrt(innerFunc(a) + innerFunc(b));
}
console.info(outerFunc(3,4)); //5
访问外部变量:
内部函数可以访问外部的变量与参数。
rush:js;">
var globalStr = 'globalStr';
function outerFunc2(argu) {
var localVar = 100;
function innerFunc2() {
localVar++;
console.info(argu + ":" + localVar + ":" + globalStr);
}
innerFunc2(); //hello:101:globalStr
}
outerFunc2("hello");
返回函数的函数:
因为函数是对象,所以可以作为返回值。
rush:js;">
function outerFunc(x) {
var y = 100;
return function innerFunc() {
console.info(x + y);
}
}
outerFunc(10)(); //110
以上所述就是本文的全部内容了,希望大家能够喜欢。