Javascript学习笔记——4.12|Javascript学习笔记——4.12 表达式计算

表达式计算就是把一串字符串当做代码解释运行,通过全局函数eval()实现此功能。

var str = '5+3' eval(str) //8

eval()即是函数也是运算符,它的执行流程如下图

Javascript学习笔记——4.12|Javascript学习笔记——4.12 表达式计算
文章图片
image.png
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

【Javascript学习笔记——4.12|Javascript学习笔记——4.12 表达式计算】严格模式(use strict)下,eval不可以在局部作用域定义新的变量或函数。

    推荐阅读