函数

Author Avatar
Ninefire 6月 08, 2018
  • 在其它设备中阅读本文章

函数简介

函数 function

  • 函数也是一个对象
  • 函数中可以封装一些功能(代码),在需要时可以执行(调用)这些功能(代码)。
  • 使用typeof检查一个函数对象时返回function

使用构造函数创建函数

创建一个函数对象,可以将要封装的代码以字符串的形式传递给构造函数。

var fun = new function("console.log('Hello,这是我的第一个函数。');");
var boyFriend = new function("alert('我是你的男朋友。');");

调用函数:
封装到函数中的代码不会立即执行,函数中的代码会在函数被调用的时候顺序执行。

语法:函数对象()

fun();
boyFriend();

在开发中很少(根本不)使用构造函数来创建函数对象。

使用函数声明创建函数

语法:

function 函数名([形参1, 形参2, ... ,形参n]){
  代码块...
}

例:

function fun2(){
  console.log("这是我的第二个函数~~~");
  alert("哈哈哈哈哈~~");
  document.write("~~~~()>_<)~~~~");
}

调用函数:

fun2();

使用函数表达式创建函数

实质上是创建一个匿名函数,再把匿名函数这个对象赋值给一个变量。
因此此方式是一个赋值语句,结尾处必须以分号结束。

语法:

var 函数名 = function([形参1, 形参2, ... ,形参n]){
  代码块...
};

例:

var fun3 = function(){
  console.log("我是匿名函数中封装的代码。"); 
};

调用函数:

fun3();

函数的参数

定义用来求两数之和的函数

  • 可以在函数的()中指定一个或多个形式参数,多个形式参数之间使用逗号隔开,声明形式参数就相当于在函数内部声明了对应了变量,但是并不赋值。
function sum(a, b) {
  console.log(a + b);
}

调用定义的求和函数

  • 可以在()中指定实际参数,实际参数将会赋值给函数中对应的形式参数。
sum(1, 2);
  • 函数的实际参数可以是任意的数据类型。
  • 调用函数时解析器不会检查实际参数的类型,所以要注意,是否有可能会接受到非法的参数,如果有则需要对参数进行类型检查。
  • 调用函数时解析器也不会检查实际参数的数量,多余的实际参数不会赋值而会忽略。
  • 如果实际参数的数量少于形式参数的数量,则没有对应实际参数的形式参数为undefined

函数的返回值

定义用来求三数之和的函数

  • 使用return来设置函数的返回值。
    语法:return 值;
function sum(a, b, c) {
  return a + b + c;
}
  • return后面的值将会作为函数的执行结果返回。
  • 在return后的语句都不会执行。
  • 如果不写return或者return后直接写分号return;都会返回undefined

调用定义的求和函数

  • 可以定义一个变量来接收函数的返回值。
var result = sum(1, 2, 3);
console.log(result);
// 
console.log(sum(4, 5, 6));

函数的返回值可以是任何数据类型,甚至可以是对象和函数

// 创建一个对象
var boyFriend = new Object();

// 向对象中添加属性
boyFriend.name = "手机";
boyFriend.age = "1";

// 对象的属性值可以是任何数据类型,也可以是个函数
boyFriend.sayHello = function(){
  alert("Hello,我是" + boyFriend.name);
};

// 调用这个函数
boyFriend.sayHello();
  • 函数也可以成为对象的属性,如果一个函数作为一个对象的属性保存,那么,我们称这个函数是这个对象的方法,调用这个函数就叫作调用对象的方法(method),但是方法与函数仅仅是名称上存在区别。
console.log(); // 调用console对象的log方法
document.write(); // 调用document对象的write方法
boyFriend.sayHello(); // 调用boyFriend对象的sayHello方法

立即执行函数

  • 函数定义之后,立即被调用,这种函数叫作立即执行函数。
  • 立即执行函数往往只会执行一次。
// 无参数的立即执行函数
(function(){
  alert("我是一个匿名函数~~~");
})();

// 有参数的立即执行函数
(function(a,b){
  console.log("a = " + a);
  console.log("b = " + b);
})(123, 456);

函数的方法

  • 使用call()方法
  • 使用apply()方法
    call( )和apply( )
  • 调用函数的这两个方法时都会执行函数本身,可以将一个对象作为首个参数传递给call()apply(),此时该对象将会作为函数执行时的this
  • call方法可以将实参在对象之后依次传递
  • apply方法必须将实参封装到一个数组中传递
// 创建一个函数
function fun(a, b){
  console.log("a = "+a);
  console.log("b = "+b);
}

// 创建一个对象
var obj = new Object();

// 使用两个方法调用函数
fun.call(obj, 2, 3);
fun.apply(obj, [2, 3]);

this·小结

  1. 以函数的形式调用时,this永远都是window
  2. 以某对象的方法的形式调用时,this就是该对象
  3. 以构造函数的形式调用时,this是新创建的对象
  4. 使用call()apply()方法调用时,this是指定的对象

如发现错误请联系我,谢谢你。
本文链接:http://ninefire.tk/JavaScript.basics/10.html