(0, eval)()用法示例和简单解析

分组远算符()

  1. 分组运算符里面可以是表达式, 也可以是字面量的值
  2. 此算法不将GetValue应用于计算Expression(表达式)的结果.这样做的主要原因是,诸如delete和typeof等操作符可以应用于括号表达式

逗号运算符

  1. 逗号运算符对于它的每个操作数求值(从左到右), 并返回最后一个操作数的值
  2. (0, person.getName)产生了赋值操作,等同于(const getName = person.getName)()
  3. this: 全局对象, window
var varNum = 10
function evalCode() {
eval(`var varNum=20`)
}
function evalCode2() {
(0, eval)(`var varNum=30`)
}
console.log('varNum:', varNum)//varNum: 10
evalCode()
console.log('varNum:', varNum)//varNum: 20
evalCode2()
console.log('varNum:', varNum) // varNum: 30
let name = 'let的name'
const person = {
    name: 'person的name',
    getName() {
        console.log(this)
        return this.name
    }
}
const getName = person.getName
try {
    const r1 = getName()
    console.log('r1:', r1) // undefined, this是window
    const r2 = person.getName()
    console.log('r2:', r2)//r2: person的name, this是person
    const r3 = (person.getName)()
    console.log('r3:', r3)//r3: person的name, this是person
    const r4 = (0, person.getName)()
    console.log('r4:', r4)// undefined, this是window
} catch (error) {
    console.log(err)
}
var variable = 10;
;(function (){
  var variable = 20;
	(0, eval)('console.log(variable)'); // 10, 因为要去全局作用域找
  (eval)('console.log(variable)'); // 20, 因为在块作用域找
})()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值