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

TypeError:“不能在严格模式函数或用于调用它们的参数对象上访问‘caller’、'callee‘和' arguments’属性”

这个错误是由于在严格模式下,访问函数的caller、callee和arguments属性会抛出TypeError。在严格模式下,这些属性被认为是不安全的,因为它们可以用来追踪函数的调用栈和参数。

具体来说,这些属性的含义如下:

  • caller属性:返回一个对调用当前函数的函数的引用。在严格模式下,访问该属性会抛出TypeError。
  • callee属性:返回当前正在执行的函数的引用。在严格模式下,访问该属性会抛出TypeError。
  • arguments属性:返回一个类数组对象,包含当前函数调用时传递的参数。在严格模式下,访问该属性会抛出TypeError。

为了解决这个问题,可以采取以下几种方法:

  1. 避免在严格模式下使用caller、callee和arguments属性,尽量使用其他方式实现相同的功能。
  2. 如果确实需要使用这些属性,可以将代码从严格模式切换为非严格模式。
  3. 使用其他替代方案,例如使用函数参数代替arguments对象,或者使用函数表达式代替callee属性。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(Serverless):https://cloud.tencent.com/product/scf
  • 云开发(CloudBase):https://cloud.tencent.com/product/tcb
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云数据库(CDB):https://cloud.tencent.com/product/cdb
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 移动开发(MPS):https://cloud.tencent.com/product/mps
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅为腾讯云相关产品的介绍页面,供参考使用。

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

相关·内容

Js严格模式

对一个普通函数来说,this总会是一个对象:不管调用时this它本来就是一个对象;还是用布尔值,字符串或者数字调用函数函数里面被封装成对象this;还是使用undefined或者null调用函数式...在普通模式下用这些扩展的话,当一个叫fun函数正在被调用时候,fun.caller是最后一个调用fun函数,而且fun.arguments包含调用fun时用形参。...如果fun在严格模式下,那么fun.callerfun.arguments都是不可删除属性而且在存值、取值时都会报错。..."; function ss(){ console.log(ss.caller); // Uncaught TypeError: 'caller', 'callee', and 'arguments...console.log(ss.arguments); // Uncaught TypeError: 'caller', 'callee', and 'arguments' properties

2.3K30

严格模式 – JavaScript

语法错误 第五, 严格模式要求函数参数名唯一. 在正常模式下, 最后一个重名参数名会掩盖之前重名参数. 之前参数仍然可以通过 arguments[i] 来访问, 还不是完全无法访问....x; } 一种取代 with 简单方法是,将目标对象赋给一个短命名变量,然后访问这个变量相应属性....严格模式下,函数 arguments 对象会保存函数调用原始参数。...在普通模式下用这些扩展的话,当一个叫fun函数正在被调用时候,fun.caller是最后一个调用fun函数,而且fun.arguments包含调用fun时用形参。...在一些旧时ECMAScript实现中arguments.caller曾经是一个对象,里面存储属性指向那个函数变量。

99630

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属性或者不安全变量,从而造成安全问题。

85230

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属性或者不安全变量,从而造成安全问题。

87430

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

在提到上述概念之前,首先想说说javascript中函数隐含参数arguments arguments对象代表正在执行函数调用函数参数。...说明Arguments是进行函数调用时,除了指定参数外,还另外创建一个隐藏对象。...Arguments是一个类似数组但不是数组对象,说它类似数组是因为其具有数组一样访问性质及方式,可以由arguments[n]来访问对应单个参数值,并拥有数组长度属性length。...还有就是arguments对象存储是实际传递给函数参数,而局限于函数声明所定义参数列表,而且不能显式创建 arguments对象arguments对象只有函数开始时才可用。...而该属性仅当相关函数正在执行时才可用。还有需要注意callee拥有length属性,这个属性有时候用于验证还是比较好

2.3K60

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

,需要注意下这点,看个例子: var d = a.c; d(); //将对象c函数引用赋值给d,调用d,此时d()是普调函数调用,上下文在非严格模式下是全局对象,不是对象a 下面通过一个例子来说明普通函数调用对象方法调用...而当作为对象来看待时,对象特性此时也就适用于这个函数对象,如:动态为其添加删除属性、方法,作为值被传递使用等。...而 arguments 对象中还有一个属性 callee,它指向当前正在执行函数,在函数体内部可以通过 arguments.callee 来获取函数对象本身,然后访问 length 属性。...caller caller 属性表示指向当前正在执行函数函数,也就是当前在执行函数是在哪个函数内执行。这个是非标准,但大多浏览器都有实现。 在严格模式下,不能使用。...还有一点需要注意是,有的书里是说这个 caller 属性函数参数对象 arguments一个属性,但某些浏览器中,caller 是直接作为函数对象属性

53220

严格模式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循环里面不能声明函数

93920

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

Function.caller表现跟严格模式严格模式是有区别的,在MDN可以看到定义:它会返回调用指定函数函数,在严格模式中禁止使用主要是因为尾调用优化。...总结来说,非严格模式函数caller属性唯一限制是,如果它要产生一个值,那么该值不能是严格模式函数。这一点大部分js引擎实现都还不错。 V8引擎严格模式为什么不报错,而是返回NULL?...: (在理解下面这段话之前,最好先了解下什么是活动对象,可以参考这篇文章) 我们试图找到函数foo最新活动对象,即最后一次调用foo且未return调用者。...此外,如果有父活动对象,但它是严格模式函数我们无法访问它,那么我们也返回null。 其他情况,我们从父活动对象中返回闭包。...根据这几条规则我们已经可以知道,在最开始例子中,我们命中是第5条规则,父活动对象严格模式函数,所以得到结果是null。

85460

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

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

1.3K10

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

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

95200

追踪收集解决方法

) {         return J$.iidToLocation(J$.getGlobalIID(iid));     } 函数范围内所有变量名称范围( 全局局部) //判断变量是全局变量还是局部变量...if(window.value===value) 在执行该行之前这些变量值 //调用send()函数addVariable()函数将该行执行前变量写道追踪 FAILURE标记 //当一个对象访问方法属性时...,如果这个方法属性与DOM相关且对象值为null,则将FRITURE标记写入追踪。...(0,arg0_length);//用于提取字符串中介于两个指定下标之间字符 if (prev_char == '(') {//没有参数 arguments[0] = arguments[0...0] = arguments[0].substring(0,arg0_length);//用于提取字符串中介于两个指定下标之间字符 if (prev_char == '(') {//没有参数

48600

JavaScript(六)

其中,arguments 之前说过,它是一个类数组对象,包含着传入函数所有参数。这个对象还有一个名叫 callee 属性,该属性是一个指针,指向拥有这个 arguments 对象函数。...因为 outer() 调用了 inter(),所以 inner.caller 就指向 outer()。 当函数严格模式下运行时,访问 arguments.callee 会导致错误。...ECMAScript 5 还定义了 arguments.caller 属性,但在严格模式访问它也会导致错误,而在非严格模式下这个属性始终是 undefined。...定义这个属性是为了分清 arguments.caller 函数 caller 属性函数属性方法 ECMAScript 中函数对象,因此函数也有属性方法。...不属于任何其他对象属性方法,最终都是它属性方法。事实,没有全局变量全局函数,所有在全局作用域中定义属性函数,都是 Global 对象属性

35230
领券