函数、构造函数、函数上下文

函数

JavaScript有一些内置函数:alert、prompt、console等。

我们可以自定义函数使用: 函数名()

声明函数

	function fun(){
		console.log("鹅鹅鹅,曲项向天歌");
		console.log("白毛浮绿水,红掌拨清波");
	}

调用函数

	fun();//函数的调用

带参数的函数

	function sum(a,b){//形参
		console.log(a+b);
	}
	sum(2,3);//实参

局部变量

JavaScript中只有两种局部变量:作为函数形参、在函数体中声明变量。

处理局部变量都是全局变量。

	function fun(a,b){
		console.log(a);
		console.log(b);
		var i = 9;   // 局部变量
	}
	fun("打豆豆","吃饭");
	console.log(i); // 异常 Uncaught ReferenceError: i is not defined

作用域

全局作用域:你可以理解为两个双闭合标签script之间

函数作用域:函数体

没有重载

JavaScript中没有重载的概念,如果有多个重名的函数,永远是后者覆盖前者。

函数的型参多,只传入一部分。

调用的实参比形参多,只传入与形参个数相同的部分。

	function fun1(a,b){
		console.log(a);
		console.log(b);
	}
	function fun1(a){
		console.log(a);
	}
	fun1("fafsd")
	fun1("123","4563")

关键字return

结合函数一起使用,可以将函数计算完记过返回,和java中相同。

函数上下文

函数上下文即为this,它只能在函数体中使用,它代表的数值并不是一个固定数值,函数上下文数值取决函数该如何调用执行。

函数的执行方式

  1. 函数名+小括号 ;
  2. 函数作为事件处理函数执行;
  3. 定时器回调函数执行;
  4. 函数作为数组元素枚举出来执行;
  5. 函数作为对象方法执行 。
  6. new
function fun(){
		//这个this是函数上下文
		console.log(this);//window
	}
	fun();
	
	
	var div = document.getElementById("box");
	//事件处理函数
	div.onclick = function(){
		console.log(this);// 绑定的标签,上下文是div
	}
	
	//定时器回调
	//参数(函数、时间)
	setInterval(function(){
		console.log(this);//window
	},5000);
	
	//函数作为数组的元素枚举
	var arr = [1,2,3,4,function(){
		console.log("i")
	},function(){
		console.log(this)//当前数组
	},7,8,9];
	arr[4]();
	arr[5]();
	
	//函数作为对象的方法执行.
	var obj = {
		name:"dsh",
		age:24,
		run:function(){
			console.log("learn");
			console.log(this);//当前对象
		}
	}
	obj.run();

	//构造函数
	function Fun(){
		//创建了一个空的狭义对象,一个{},this指向这个大括号
		console.log("执行");
		console.log(this);
	}
	new Fun;

构造函数

构造函数【constructor】两个特征:

  1. 函数名字首个英文字母一般需要大写;
  2. 构造函数必须是由关键字new调用的。

普通函数能干什么,构造函数就能干什么。构造函数也可以看做类,es6直接Class People{ constructor(){ } }

   //问题:老师函数名+小括号调用函数执行、new调用函数也执行,两者也有什么区别呀?
   function People(){
     //第一步:在函数体中神秘创建了一个空的狭义对象【大的花括号】
     //第二步:函数体种上下文指向当前这个空的狭义对象
     //第三步:可以通过点语法给狭义对象动态添加属性、方法
     this.xingming = "小明";
     this.age = 18;
     this.sex = "男";
     this.hobby = ['吃饭','睡觉','打豆豆'];
     //第四步:虽然没有关键字return,但是系统回自动将狭义对象返回 
   }
   var obj = new People;
   console.log(obj);
	// 可以动态给对象添加方法。
	obj.eat = function(params) {
		console.log(params);
	}
	obj.eat("ff");

原型链

prototype

  • 任意构造函数天生都有一个prototype属性,指向一个空的狭义对象,而这个对象正是调用构造函数时创建的实例的原型。
  • 实例天生拥有一个__proto__属性,可以向上面的狭义对象借用方法使用。或者说每一个实例对象都会从原型中“继承”属性。
	function Dog(name,sex,age){
		this.name = name;
		this.sex = sex;
		this.age = age
		
	}
	//使用原型添加方法
	Dog.prototype.eat = function(){
		console.log("fsfd");
	}
	var erha = new Dog("er","man",44);
	erha.eat();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值