JavaScript函数(function)
函数是js语言中用的十分普遍的一种对象,手把手教学来了:
我们在编程的时候经常会写到一些功能并且会重复使用到它,为了避免每次使用时都重新写一遍代码,我们可以将代码封装进函数中,每次使用时只需要调用即可。
- 函数也是一个对象
- 函数中可以封装一些代码(功能),在需要的时候可以调用执行这些代码
- 使用typeof检查一个函数对象时,会返回function
//构造一个函数对象 fun
var fun = new Function();
这种方法是直接创建一个函数 赋值给fun;
--------------------------------------------------------------
还有一种方法如下:
//使用函数声明来创建函数
//这种方式是将一个匿名函数赋值给变量
function fun1 = (){}
--------------------------------------------------------------
下面我们来对函数进行操作:
// 将要封装的代码以字符串的形式传递给构造函数
//被封装的代码不会在执行程序后立即执行,要等我们调用它时才会被使用
var funny = new Function("console.log(‘hello’);");
可以看到,我们将一句console.log(‘hello’);
封装到了函数funny
中。这句函数的意思是像控制台输出一个hello
,那么我们要怎么执行这句代码呢,如下:
//调用两次funny函数
funny();
funny();
----------------------以上操作等同于:-------------------
//使用函数声明来创建一个函数
//这种方式是将一个匿名函数赋值给变量 funny
function funny(){
console.log("hello");
}
funny();
funny();
以上是函数的基本创建和使用方法
--------------------------------------------------------------
接下来讲解函数的参数:
//创建两个函数的形参 a , b
function sum(a,b){
//向控制台输出a加b的和
console.log(a+b);
}
//为函数sum指定两个实参 1 , 2
sum(1,2);
// 如果实参的数量少于形参的数量,没有对应上的形参将是undefined
// 调用函数时解析器不会检测实参的类型
--------------------------------------------------------------
函数的返回值:
// 函数的返回值
function sum2(a,b,c){
var d = a + b + c;
// 设置一个变量 d 来接受函数的返回值
return d;
//return后可以跟任意类型的值,没有写值则是undefined
// 函数中return后的语句都不会执行
}
// 定义一个变量yes来接收函数sum2的结果并 指定三个实参
// 函数返回什么yes就是什么
var yes = sum2(3,4,5);
console.log("函数返回值:" +yes);
--------------------------------------------------------------
还有最后一种用法,立即执行函数:
//整体加上一个括号使引擎以为这是一整个表达式
(function(){
alert("我是一个立即执行函数");
})
//调用此函数
();
--------------------------------------------------------------
接下来讲解函数的几种隐藏属性:
- 构造函数this:
1.构造函数的执行流程: 立刻创建一个新的对象
2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象
3.逐行执行函数中的代码
4.将新建的对象作为返回值返回
// 构造函数特点是用函数方法创建对象
// 变量名首字母大写
function Person(name,age,gender){
// 将这些属性添加到对象中
this.name = name;
this.age = age;
this.genser = gender;
// 向函数中添加一个方法
this.sayName = funtion(){
alert(this.name);
}
}
那么这个this
是什么呢;
解析器在调用函数时会向函数中传递一个隐含的参数this
,调用方式不同,this会指向不同的对象:
- 以函数形式调用时,this指window
this.fun();
- 以方法形式调用时this指调用的对象 ( 如果一个函数是一个对象的属性那么我们称这个函数是这个对象的方法 )
this.obj.fun();
- 函数的原型
- 每一个函数中都有一个隐藏属性prototype 原型对象
- 原型对象可以被同、下级别的方法调用
function Myclass(){
}
// 向Myclass的原型对象中添加属性a
Myclass.prototype.a = 123;
// 向Myclass原型中添加一个方法 sayhello
Myclass.prototype.sayHello = function(){
alert("hello");
};
//再创建一个变量hhh
var hhh = new Myclass();
//再再创建一个变量a到hhh中
hhh.a = 345;
// hhh中有a则输出mc中的a,若无则Myclass里找
console.log(hhh.a);
// 执行mc中的sayHello,若无则找Myclass
mc.sayHello();