在严格模式或ES6中,如何在函数内部拿到函数对象本身?

时间: 2018-01-15阅读: 1532标签: 函数

在函数中方法函数对象本身,我们以前可以这样实现:

function fn(){
    console.log(fn.name);
    console.log(arguments.callee.name);
}
fn();

但是在严格模式或ES6下,使用callee/caller会报错,如下:

'use strict';
function fn(){
    console.log(arguments.callee.name);
}
fn();
//Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

由于不能使用arguments.callee,在不使用函数名本身的情况,有什么方法可以实现呢?这里写个 hack 的解决方法:

'use strict'
function jamie(){
	var callerName;
	try { 
		throw new Error(); 
	}catch(e){ 
	    var re = /(\w+)@|at (\w+) \(/g, st = e.stack, m;
	    re.exec(st), m = re.exec(st);
	    callerName = m[1] || m[2];
	}
	console.log(callerName);
};

function fn (){
   jamie();
}
fn();



ES6 Array.find()和findIndex()函数用法

ES6为Array增加了find(),findIndex函数。find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined,而findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。

Vue 中的 computed 和 methods 的使用

computed:在computed中的函数,是在dom加载后马上执行的;methods:在methods中的函数,必须要有一定的触发条件,才会执行 ,Vue.js 将绑定表达式限制为一个表达式,如果想要实现绑定多于一个表达式的逻辑

JS函数提升和变量提升

函数声明(function declaration),通过function 关键字,functionName函数名,arg参数(可选)定义的函数。函数表达式: 将函数声明赋值给一个变量,这个表达式叫做函数表达式

ES6箭头函数

传统的javascript函数语法并没有提供任何的灵活性,每一次你需要定义一个函数时,你都必须输入function () {},这至少会出现两个问题,ES6箭头函数都圆满解决了它,箭头函数内的this值继承自外围作用域。运行时它会首先到它的父作用域找,如果父作用域还是箭头函数

Jquery的toggle()函数

toggle()函数用于切换元素的显示/隐藏 jQuery还有一个同名的事件函数,toggle(),用于绑定click事件并在触发时轮流切换执行不同的事件处理函数。

Js中document.execCommand()函数的使用

document.execCommand()方法处理Html数据时常用语法格式如下:document.execCommand(sCommand[,交互方式, 动态参数])其中:sCommand为指令参数(如下例中的”2D-Position”),交互方式参数如果是true的话将显示对话框,如果为false的话,则不显示对话框

Js函数表达和闭包

函数声明提升:函数可以先用,声明在下面自动给提到上面来,函数表达式=后面的是匿名函数,又叫拉姆达函数,他一般可以被用来当成值使用(可以用来return),函数自己调用自己就叫递归,没啥好说的。当函数赋值给另一个函数时会导致重新调用函数名称不同而调用失败

js中的toString和valueOf

基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外。它们俩解决javascript值运算与显示的问题。所有对象继承了两个转换方法:每个JavaScript固有对象的 valueOf 方法定义不同。

javascript封装函数

使用函数有两步:1、定义函数,又叫声明函数, 封装函数。2、调用函数var 变量 = 函数名(实参);对函数的参数和返回值的理解

什么时候不该使用es6箭头函数?

箭头函数带来了很多便利。恰当的使用箭头函数可以让我们避免使用早期的.bind()函数或者需要固定上下文的地方并且让代码更加简洁。箭头函数也有一些不便利的地方。我们在需要动态上下文的地方不能使用箭头函数:定义需要动态上下文的函数

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全