严格模式提供的保证之一是,在严格函数代码中,标识符arguments
始终引用该函数的 Arguments 对象。
function fn () {
'use strict';
// malicious code
arguments // still refers to the function's Arguments object
}
因此,无论在 处注入什么代码,在整个函数调用期间// malicious code
,标识符都会不可变地绑定到函数的 Arguments 对象。arguments
我想知道是否为标识符提供了相同的保证eval
,即eval
带有保证的标识符是否始终引用内置的全局eval
函数?
我想指出,如果我们的严格代码嵌套在非严格代码中,则不提供上述保证。允许非严格代码创建本地"eval"
绑定,或改变全局"eval"
绑定。(此外,如果另一个非严格程序使用相同的全局对象(如在包含多个脚本的网页中),则也不提供上述保证。)
所以,为了这个问题,我想定义以下场景:
- 我们的程序是独立的,即它不与任何其他程序共享其全局对象,
我们的程序由一个严格的 IIFE 组成,如下所示:
(function () { 'use strict'; // malicious code eval // does it still refer to the built-in global eval function? }());
鉴于这些条件,是否可以在 处注入代码\\ malicious code
,这会改变eval
标识符的值?