首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular typeError:不能在严格模式函数或参数对象上访问“caller”、“callee”和“arguments”属性

Angular是一种流行的前端开发框架,用于构建单页应用程序。当在严格模式下使用Angular时,可能会遇到以下错误消息:TypeError: Cannot access 'caller', 'callee', and 'arguments' properties on strict mode functions or the arguments objects for calls to them。

这个错误是由于在严格模式下,访问了函数或参数对象的'caller'、'callee'和'arguments'属性,而在严格模式下是不允许访问这些属性的。

解决这个问题的方法是使用其他替代方法来实现相同的功能,而不是直接访问这些属性。下面是一些常见的解决方法:

  1. 使用命名函数表达式:将函数定义为命名函数表达式,而不是使用函数声明。这样可以在函数内部访问函数的名称。
代码语言:txt
复制
var myFunction = function functionName() {
  // 在函数内部可以访问函数的名称
};
  1. 使用Function.prototype.caller、Function.prototype.callee和Function.prototype.arguments:这些属性在严格模式下被禁用,但可以使用它们的替代方法来实现相同的功能。
代码语言:txt
复制
var myFunction = function() {
  var caller = arguments.callee.caller; // 替代方法
  var callee = arguments.callee; // 替代方法
  var args = Array.prototype.slice.call(arguments); // 替代方法
};
  1. 使用ES6的箭头函数:箭头函数没有自己的'caller'、'callee'和'arguments'属性,因此可以在严格模式下使用它们。
代码语言:txt
复制
var myFunction = () => {
  // 在箭头函数内部无法访问'caller'、'callee'和'arguments'属性
};

总结: 在严格模式下,不能直接访问函数或参数对象的'caller'、'callee'和'arguments'属性。可以使用命名函数表达式、Function.prototype.caller、Function.prototype.callee、Function.prototype.arguments或箭头函数来替代这些属性的使用。

关于Angular的更多信息和相关产品,您可以参考腾讯云的文档和资源:

请注意,以上链接仅供参考,并非直接回答问题的内容。具体的产品和解决方案选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

javascript中的Strict模式

严格模式并不是非严格模式的一个子集,相反的严格模式在语义严格模式都发生了一定的变化,所以我们在使用过程中,一定要经过严格的测试。以保证在严格模式下程序的执行严格模式下的执行效果一致。...; // throws a TypeError 禁止对象函数参数中的重复属性: 'use strict'; var o = { p: 1, p: 2 }; // Duplicate declaration...另外,在普通模式下,arguments命名参数相绑定的,并且arguments[0]arg同步变化,都表示的是第一个参数。...在Strict模式下,arguments.callee是被禁用的。通常来说arguments.callee指向的是当前执行的函数,这会阻止虚拟机对内联的优化,所以在Strict模式下是禁止的。...另外,在普通模式下,我们可以通过fun.caller或者fun.arguments来获取到函数的调用者参数,这有可能会访问到一些private属性或者不安全的变量,从而造成安全问题。

84930

javascript中的Strict模式

严格模式并不是非严格模式的一个子集,相反的严格模式在语义严格模式都发生了一定的变化,所以我们在使用过程中,一定要经过严格的测试。以保证在严格模式下程序的执行严格模式下的执行效果一致。...; // throws a TypeError 禁止对象函数参数中的重复属性: 'use strict'; var o = { p: 1, p: 2 }; // Duplicate declaration...另外,在普通模式下,arguments命名参数相绑定的,并且arguments[0]arg同步变化,都表示的是第一个参数。...在Strict模式下,arguments.callee是被禁用的。通常来说arguments.callee指向的是当前执行的函数,这会阻止虚拟机对内联的优化,所以在Strict模式下是禁止的。...另外,在普通模式下,我们可以通过fun.caller或者fun.arguments来获取到函数的调用者参数,这有可能会访问到一些private属性或者不安全的变量,从而造成安全问题。

87130

js的隐含参数(arguments,callee,caller)使用方法

在提到上述的概念之前,首先想说说javascript中函数的隐含参数arguments arguments对象代表正在执行的函数调用它的函数参数。...Arguments是一个类似数组但不是数组的对象,说它类似数组是因为其具有数组一样的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。...还有就是arguments对象存储的是实际传递给函数参数,而局限于函数声明所定义的参数列表,而且不能显式创建 arguments对象arguments对象只有函数开始时才可用。...[function.]arguments.callee可选项 function参数是当前正在执行的 Function对象的名称。说明callee属性的初始值就是正被执行的 Function 对象。...arguments对象,那么将导致一个 TypeError

2.3K60

严格模式use strict

严格模式IE10以上各大浏览器都已经支持,要注意的是,相同代码在严格模式严格模式下运行得到的结果会有不同。主要还是增加了很多静默是吧抛出异常。...对只读属性、getter属性赋值,对禁止扩展的对象添加新属性,删除不可删除的属性都会抛出异常。 对象有重名属性函数参数重名,正常是后面覆盖之前的,严格模式下是语法错误、会报错。...禁止了八进制表示法 ECMAScript 6中的严格模式禁止设置primitive值的属性.采用严格模式,设置属性将会简单忽略(no-op),采用严格模式,将抛出TypeError错误。...console.log(fn.arguments); console.log(fn.caller); } fn()//报错 Arguments不能赋值,也不会追踪参数变化: function fn(a)...严格模式下的arguments不会再提供访问与调用这个函数相关的变量的途径,也就是禁用arguments.callee 函数声明必须在顶层,也就是说只能在全局或者函数作用域内声明函数,在if或者for循环里面不能声明函数

93520

解决Function.caller used to retrieve strict caller报错

Function.caller的表现跟严格模式严格模式是有区别的,在MDN可以看到定义:它会返回调用指定函数函数,在严格模式中禁止使用主要是因为尾调用优化。...你可以在不同浏览器执行这段代码: function fun1() { console.log(arguments.callee.caller); } function fun2()...总结来说,非严格模式函数的“caller属性唯一的限制是,如果它要产生一个值,那么该值不能是严格模式函数。这一点大部分js引擎实现的都还不错。 V8引擎严格模式为什么不报错,而是返回NULL?...此外,如果有父活动对象,但它是严格模式函数我们无法访问它,那么我们也返回null。 其他情况,我们从父活动对象中返回闭包。...根据这几条规则我们已经可以知道,在最开始的例子中,我们命中的是第5条规则,父活动对象严格模式函数,所以得到的结果是null。

85160

js面试题系列003

new操作符具体干了什么呢 1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。 2、属性方法被加入到 this 引用的对象中。...基于WebSocket的推送方案 SSE(Server-Send Event):服务器推送数据新方式 javascript对象的几种创建方式 1,工厂模式 2,构造函数模式 3,原型模式 4,混合构造函数原型模式...6,寄生组合式继承 严格模式的限制 变量必须声明后再使用 函数参数不能有同名属性,否则报错 不能使用with语句 不能对只读属性赋值,否则报错 不能使用前缀0表示八进制数,否则报错 不能删除不可删除的属性...不会自动反映函数参数的变化 不能使用arguments.callee 不能使用arguments.caller 禁止this指向全局对象 不能使用fn.callerfn.arguments获取函数调用的堆栈...AMD推荐的风格通过返回一个对象做为模块对象,CommonJS的风格通过对module.exportsexports的属性赋值来达到暴露模块对象的目的 mvvm的理解 Angular它采用双向绑定(data-binding

98330

JavaScript 函数参数-Arguments(实参)对象

5.3 length属性 (1)通过arguments对象的length属性,可以判断函数调用时传递的实际参数个数。 ? (2)注意 ?...arguments对象的length属性显示实参的个数,函数的length属性显示形参的个数 (3)形参只是提供便利,但不是必需的 ?...5.4 和数组的关系 (1)需要注意的是,虽然arguments很像数组,但它是一个对象。数组专有的方法(比如sliceforEach),不能在arguments对象直接使用。...5.5 callee 属性 (1)arguments对象有一个名为callee属性,该属性是一个指针,指向拥有这个arguments对象函数。 (2)下面是经典的阶乘函数 ?...(3) 但是,上面这个函数的执行与函数名紧紧耦合在了一起,可以使用arguments.callee可以消除函数解耦 ? (4) 但在严格模式下,访问这个属性会抛出TypeError错误 ?

1.3K10

前端入门12-JavaScript语法之函数声明正文-函数

但有一点需要注意,在严格模式下,不允许使用这个属性了,这个变量被作为一个保留字了。 length 上述也提过,这个属性表示函数声明时的形参个数,也可以说是函数期望的参数个数。...而 arguments 对象中还有一个属性 callee,它指向当前正在执行的函数,在函数体内部可以通过 arguments.callee 来获取函数对象本身,然后访问它的 length 属性。...); } a(1); // 输出 1 2,实参个数1个,形参个数2个 a.length; //2 但需要注意一点,在严格模式下,函数体内部就不能通过 arguments.callee.length...caller caller 属性表示指向当前正在执行的函数函数,也就是当前在执行的函数是在哪个函数内执行的。这个是非标准的,但大多浏览器都有实现。 在严格模式下,不能使用。...还有一点需要注意的是,有的书里是说这个 caller 属性函数参数对象 arguments 里的一个属性,但某些浏览器中,caller 是直接作为函数对象属性

52820

js的DOM理解

ReferenceError:非法不能识别的引用数值 4. SyntaxError:发生语法解析错误 5. TypeError:操作数类型错误 6....URIError:URI处理函数使用不当 复制代码 es5严格模式 “use strict” 不再兼容es3的一些不规则语法。使用全新的es5规范。...两种用法: 全局严格模式 局部函数严格模式(推荐) 就是一行字符串,不会对兼容严格模式的浏览器产生影响。...不支持with,arguments.callee,func.caller,变量赋值前必须声 明,局部this必须被赋值 (Person.call(null/undefined) 赋值什么就是什么),拒绝重复属性参数...DOM对象即为宿主对象, 由浏览器厂商定义,用来操作htmlxml功能的一类对象的集合。 也有人称DOM是对HTML以及XML的标准编程接口。

4.2K30

js程序设计02——变量、作用域问题

实际,当在函数内部重写obj 时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。...关于函数内部属性 函数内有2个特殊对象,一个是arguments,一个是this。arguments用来保存参数数组,this指的是当前函数执行绑定的执行环境。...arguments有一个特殊属性叫做callee,该属性是一个指针,指向拥有该arguments对象函数,也就是说arguments属于哪个函数,那么arguments.callee()就代表哪个函数...因为outer调用了inner,所以在inner中使用caller属性,直接返回的是outer函数的引用,全局的话直接返回null: function inner(){ console.log(arguments.callee.caller...关于eval eval()是js一个很变态的函数,属于Global对象,eval()执行时会将eval()中的参数当做实际ECMAScript语句来执行,所以一下写法是正确的(严格模式下会报错): eval

94900

ES6 模块化入门

通过这篇文章,我们将看到 export import 语句,以及 ES6 模块是怎么与 CommonJS 模块兼容的。 严格模式 在 ES6 模块系统中,严格模式是默认开启的。...下面是 MDN上关于严格模式的解释:严格模式 变量必须显式声明 函数的形参必须有唯一的名称(否则会报语法错误) 不能使用with 给只读的属性赋值会报错 像 00840 这样的八进制数字会报语法错误 试图...delete 无法删除的属性会报错 delete prop 会报语法错误,可以使用 delete global[prop] eval 不会在所在的词法作用域引入新的变量 eval arguments...不能被改变赋值 arguments 不会跟踪方法的参数变化 arguments.callee 不再支持,会报 TypeError arguments.caller 不再支持,会报 TypeError...传入方法内部的 this 不再被强制转换成 Object fn.caller fn.arguments 不再支持 保留关键字 protected,static ,interface 不能被绑定 即使在

76720
领券