分组远算符()
- 分组运算符里面可以是表达式, 也可以是字面量的值
- 此算法不将GetValue应用于计算Expression(表达式)的结果.这样做的主要原因是,诸如delete和typeof等操作符可以应用于括号表达式
逗号运算符
- 逗号运算符对于它的每个操作数求值(从左到右), 并返回最后一个操作数的值
- (0, person.getName)产生了赋值操作,等同于(const getName = person.getName)()
- 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, 因为在块作用域找
})()