目录
JS函数
概念:
函数是被设计为执行特定任务的代码块,函数会在某代码调用它时被执行。函数由参数和return返回值组成。参数分为形参和实参,形参就是函数定义时用来接收实参的值(形参名字自己起的),实参就是调用函数时,这个函数所接收到的真实的值。函数的返回值会返回给函数的调用者。
创建方式:
1.命名函数(这里的调用是可以放到函数定义之前的,也就是function fun()的上面调用,因为会有函数提升,这个下篇细说)
function fun() {
console.log("我被调用啦");
}
// 函数调用
fun() //我被调用啦
2.匿名函数
2.1.表达式方式创建函数
var fun = function() { /* 这是个匿名函数function,只不过把这个函数赋给了变量fun */
console.log("我被调用啦");
}
//不可在函数定义之前调用
fun()//我被调用啦
2.2.自调用函数(一次性函数,声明的时候就会调用)
(function(){
console.log("我被调用啦");
})();
3.构造函数创建(基本不咋用,了解就行)
// 函数名 参数1,参数2...函数体(参数都得是字符串形式)
var fun = new Function("a","b","console.log(a+b)")
fun(1,2)
构造函数
概念:
构造函数是一种特殊的函数,与new一起使用,是用来生成实例对象的函数。
好,那么问题来了,什么是实例对象?咱先分开看
对象:是一个具体的事物,它的成员由属性和方法组成。
实例:简单来说,人是一个类,那我就是人的实例。熊是动物的实例。也就是说实例是类的真实对像。放一个经典代码
var person1 = new Object()
var person2 = {}
总结来说,实例person1就是咱常说的new出来的一个东西但也是个对象,对象person2就是拥有属性和方法的无序集合。
对象不一定是实例,但实例一定是对象。
回到构造函数。先创建一个构造函数。
function Bear() { //首字母大写,为了区分普通函数
this.name = 'wisdom'//属性
this.shout = function() { //方法
console.log("吼");
}
}
注:构造函数的属性和方法前必须加this关键字,指代要生成的对象。因为在代码块执行之前,会在私有作用域开辟新的堆内存,构造函数的执行体this会指向这个堆。代码执行完毕后,会把这个堆内存地址返回。然后开始创建Bear类的实例,让this指向这个实例,this.name = 'wisdom'就是再给这个实例设置私有属性。
构造函数的调用
var a = Bear()
var b = new Bear()
console.log(a);//undefined
console.log(b);//Bear { name: 'wisdom', shout: [Function] }
所以,new关键字就是执行这个构造函数,它会返回一个对象。
构造函数的return
1.return this.boo
function Bear() { //首字母大写,为了区分普通函数
this.boo = true//属性
return this.boo
}
var a = new Bear()
console.log(a);
2.return对象(返回对象)
let bear = {
name : "wisdom"
}
function Bear() { //首字母大写,为了区分普通函数
this.boo = true//属性
return bear
}
var a = new Bear()
console.log(a);
3.不写return就返回实例化对象
总结:
1.构造函数可以通过new创建多个实例对象
2.构造函数里面的属性或方法前要加this
3.构造函数可以不需要return就能返回实例化对象
个人学习思考总结,如有不对,请及时指出,欢迎大家讨论