表达式计算就是把一串字符串当做代码解释运行,通过全局函数eval()
实现此功能。
var str = '5+3'
eval(str) //8
eval()
即是函数也是运算符,它的执行流程如下图
eval()
中不仅可以是表达式,也可以声明变量和函数。
eval('var x = 10')
eval('function sayHello(name){conlose.log(name+"hello")}')
eval()
使用它所在地方的变量作用域。如果在代码顶层调用eval(代码)
,则代码具有全局变量和全局函数。如果在函数中调用eval(代码)
,则代码具有该函数内的局部作用域。
直接调用和间接调用
直接调用时,总是调用eval所在的上下文作用域执行代码;
间接调用(通过var geval = eval 再调用geval(代码))时,不管放在哪只能访问全局作用域,无法访问局部变量和函数。
var geval = eval
var x = 1 , y = 1
function hello(){
var x = 10, y = 10
eval('x++') //访问局部变量
console.log(x) //11
geval('y++') //访问全局变量
console.log(y) //10
}
hello()
console.log(x) //1
console.log(y) //2
严格模式(use strict)下,eval不可以在局部作用域定义新的变量或函数。
网友评论