【003】对前端安全有哪些了解,XSS和CSRF是什么?

Anna 2020年1月15日23:19:17安全防范评论阅读模式

首先在这里给出上一题【简述JavaScript里的call、apply、caller、callee用法与区别】的参考回答:

call() 语法API:

fn.call(thisArg, arg1, arg2, …)

call() 作用都是改变当前作用域,即改变 this 的指向,将函数对象从初始的上下文改变为由thisArg指定的新对象。

thisArg:可选项,将被当做当前对象。如果没有thisArg,那么global对象将被用作thisArg.

arg1,arg2:可选项,将被传递方法参数序列。

【003】对前端安全有哪些了解,XSS和CSRF是什么?

apply() 语法API:

fn.apply(thisArg, [arg1,arg2,…argN])

从api上可以看出apply()区别于call()是第二个参数,apply()传入的是一个数组。

使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入,arguments是数组。

【003】对前端安全有哪些了解,XSS和CSRF是什么?

call和apply异同:

apply() 与 call() 的作用相同,都是改变当前作用域 this 指向。不同的是它们第二个参数,apply 传入的是数组,而 call 传入的是方法参数序列。


caller() 语法API:

arguments.caller()

caller返回一个对函数的引用,该函数调用了当前函数。

对于函数来说,caller 属性只有在函数执行时才有定义。 如果函数是由 JavaScript 程序的顶层调用的,那么 caller 包含的就是 undefined。

【003】对前端安全有哪些了解,XSS和CSRF是什么?

但根据JavaScript MDN,出于安全性的考虑,原来 arguments.caller 这个属性已被删除,现在已经用 Function.caller 来替代这个属性了,那么正确的写法应该是readBook.caller 或 arguments.callee.caller。

callee() 语法API:

arguments.callee()

在使用JavaScript写递归函数时,用arguments.callee实现递函数时会更方便。

【003】对前端安全有哪些了解,XSS和CSRF是什么?

caller和callee区别:

主要区别可以从上面demo大概看出了,官方的解释是:

callee 指向正在执行的函数(可以理解为被调用者)

caller 指向调用当前函数的函数(可以理解为调用者)

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧门户观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
Anna

发表评论