web前端学习笔记14-js函数闭包及函数调用感知

一、闭包

闭包是通过将函数从一个函数内部返回到函数外部成为一个全局变量,使得函数内部的变量可以在函数外部访问

1.1 闭包方式1:通过全局变量到函数中获取内部函数(不常用)
// 闭包1(潜入法)
var me;  //全局变量

function Lihua_home(){
	// 局部变量
	var tv='电视机';
	var wash='洗衣机';
	var desk='桌子';
	// 内部函数
	var father=function(){
		
	};
	var mother=function(){
		
	};
	var borther=function(){
		
	};
	var lihua=function(){
		
	};
	me=function(){
		return tv;  
		/*
			return tv;放在内部函数中的作用是:
			函数运行完毕不会回收tv变量,
			因为tv变量还被其他函数使用
		*/
	};  
}
// 访问函数
Lihua_home();
// 在函数外部访问局部变量
console.log(me);
// 取出局部变量
var ds=me();
console.log(ds);
1.2 闭包方式2(常用)
// 闭包2
function Lihua_home2(){
	// 局部变量
	var tv='电视机';
	var wash='洗衣机';
	var desk='桌子';
	// 内部函数
	function father(){
		
	};
	function mother(){
		
	};
	function borther(){
		
	};
	return function(){
		return wash;
	};
}
// 调用函数
var me2=Lihua_home2();
var xyj=me2();
console.log(xyj);

二、函数调用感知

在函数中可以使用当前函数名.caller来获取调用当前函数的函数,即让函数知道谁调用了自己。可以用arguments.callee.caller来获取(防止函数改变,同递归)

// 函数调用感知
function hello(){
	if(arguments.callee.caller==zhangsan){  //如果张三调用
		console.log('你好'); //陌生人
	}else if(arguments.callee.caller==lisi){  //如果李四调用
		console.log('吃了没');  //熟人
	}	
}
// 张三遇到陌生人
function zhangsan(){
	hello();
}
zhangsan();
// 李四遇到熟人
function lisi(){
	hello();
}
lisi();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值