在函数中方法函数对象本身,我们以前可以这样实现:
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();
除了正常运行模式,ECMAscript 5添加了第二种运行模式:严格模式(strict mode),严格模式的目的消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;提高编译器效率,增加运行速度等
<!DOCTYPE>声明叫做文件类型定义(DTD),声明的作用为了告诉浏览器该文件的类型。让浏览器解析器知道应该用哪个规范来解析文档。严格模式又称标准模式,是指浏览器按照 W3C 标准解析代码。混合模式又称怪异模式或兼容模式
“use strict\\\\\\\"是ECMAScript 5引入的一条指令。指令不是语句(但非常接近于语句)。“usestrict\\\\\\\"指令和普通的语句之间有两个重要的区别:
严格模式是什么意思?有什么用途?为什么我们应该使用它? 本文 将主要从这几个问题入手,讲述在 JavaScript 中使用严格模式的必要性。严格模式是现代 JavaScript 的重要组成部分。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!