在程序中,函数其实就是一组处理特定问题的代码的集合,JavaScript中的函数和java中的方法类似,但是却没有java方法那么严谨,相比之下,它的语法更随便,更简单。
var fun1 = new Function("console.log('我是fun1')");
上述方式是使用到了”构造函数“的方法来创建的函数对象,可以将函数体以字符串的形式封装在双引号(" ")内部,当然,函数体内部的字符串就必须使用单引号(’ ')来定义了,有一个口诀:”外单内双 或 外双内单“。也就是说外层用单引号就内部就用双引号,相反也是一样的。
但在实际开发中,很少使用这种方式来创建函数对象,使用typeof()
检查一个函数对象时,会返回function类型
function 函数对象名称([形参1,形参2,形参..n]){
//函数体;
}
[]:表示是可选项
var 函数对象名称 = function([形参1,形参2,形参..n]){
//函数体;
}
在实际开发中,主要使用方式2和方式3来定义函数对象!!
先看一段代码来了解一下有参函数:
function test1(num1, num2){
console.log(num1+num2); //输出num1+num2的值
}
//调用函数
test1(1,3); // 输出 4
注意:在Java中,方法的形参必须指定类型,而在js中,形参不需要指定类型,因为js只有一个
var
类型
function test2(){
console.log('我是无参函数~');
}
test2(); //输出: 我是无参函数~
//即使你在test2()中传入参数,js中也不会报错,因为实参没有对应的实参
(function(){
alert('我是一个匿名函数');
})(); //该函数可以传入参数
该函数的特点就是往往只执行一次,并且属于一个匿名函数(即没有名字的函数),执行完成之后,你就找不到它了,因为你没有使用变量保存它的地址,它执行完就消失在内存中了。
构造函数其实就是一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写,构造函数与普通函数的区别就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new
关键字来调用
//构造函数的创建
function Person(name){
//this表示的就是调用该函数的对象
this.name = name;
}
//使用构造函数来创建一个Person对象
var per1 = new Person('张三');
console.log(per1.name); //输出 '张三'
使用同一个构造函数创建的对象,我们称其为 “一类” 对象,也将一个构造函数称为一个 “ 类 ”。我们将通过一个构造函数来创建对象,该对象称为是该类的实例。
构造函数的执行流程:
什么是作用域?
举一个简单的例子,假如张三同学在菜鸟中学读书,那么在他们学校吃饭都是需要饭卡刷卡的,此时张三同学的这个饭卡就只能在菜鸟中学食堂使用,是不是走出了这个食堂,他的饭卡就没有用了,只有在这个食堂中,他的饭卡才起作用,那么饭卡的作用域就是食堂。
函数作用域的特点:
注:在函数中没有使用var类型声明的变量都会成为全局变量
使用函数声明的方式:function 函数名(){..}
定义的函数,会在所有的代码执行之前就被创建,所以我们可以在函数声明之前就调用该函数,并且不会报错。具体实现看以下代码:
//调用该fun1函数
fun1(); //输出 ‘我是使用函数声明创建的函数fun1’
function fun1(){ //该函数会在所有代码执行之前被执行
alert("我是使用函数声明创建的函数fun1");
return;
}
若是使用 ”函数表达式“ 这种方式定义的函数,则该函数不会被声明提前,所以不能在声明前调用该函数,但函数名已经存在,属于undefined类型,但是调用函数时是不存在的,若强行调用,则会报错。
在java中,每个方法都可以有一个返回值或无返回,而在js中,函数无论如何都会有返回值,如果不写return语句或者写return;
则都会返回undefined
其他情况写什么就会返回什么,并且js中的返回值可以是任何的数据类型。
注意:当return语句后接多个使用逗号分隔的数据时,return会返回最后一个值
function n1(){
this.name = '李四';
return 1,false,3,name;
}
console.log(n1());//返回:'李四'
假如现在有一个函数function test(){..}
,那么test 和 test()的区别是:
test():表示的就是调用函数对象,例如将其传给另一个函数:fun(test())
,就是将test()的返回值作为参数传递给fun()函数。
test:表示的就是函数对象,如果将其传给另外一个函数,例如fun(test)
,相当于直接使用函数对象作为参数进行传递,参数就是对应的函数对象,而不是值。
以上就是本次讲解的所有内容,如果觉得写的还不错的话,可以点赞收藏喔,你们的支持才是我最大的动力!!! 谢谢大家!!!