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

更新日期: 2018-01-15阅读: 5.7k标签: 严格模式

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

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();



链接: https://www.fly63.com/article/detial/358

Js严格模式详解【转】

除了正常运行模式,ECMAscript 5添加了第二种运行模式:严格模式(strict mode),严格模式的目的消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;提高编译器效率,增加运行速度等

Doctype的作用?区分严格模式与混合模式意义?

<!DOCTYPE>声明叫做文件类型定义(DTD),声明的作用为了告诉浏览器该文件的类型。让浏览器解析器知道应该用哪个规范来解析文档。严格模式又称标准模式,是指浏览器按照 W3C 标准解析代码。混合模式又称怪异模式或兼容模式

js严格模式(use strict)

use strict是ECMAScript 5引入的一条指令。指令不是语句(但非常接近于语句)。“usestrict\\\\\\\\\\\\\\\"指令和普通的语句之间有两个重要的区别:

Typescript 严格模式有多严格?

use strict指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。至今,前端 er 们基本都默认开启严格模式敲代码。那么,你知道 Typescript 其实也有属于自己的严格模式吗?

为什么需要在 JavaScript 中使用严格模式?

严格模式是什么意思?有什么用途?为什么我们应该使用它? 本文 将主要从这几个问题入手,讲述在 JavaScript 中使用严格模式的必要性。严格模式是现代 JavaScript 的重要组成部分。

Typescript 严格模式到底严在哪里?

当 Typescript 严格模式设置为 on 时,它将使用 strict 族下的严格类型规则对项目中的所有文件进行代码验证。规则是:此规则不允许变量或函数参数具有隐式 any 类型。请看以下示例:

使用React严格模式避免过时的代码和副作用

严格模式是用于突出显示应用程序中潜在问题的工具,它不会呈现任何可见的UI。它只用于激活对其后代的额外检查和警告。严格模式不会影响生产环境。

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