JavaScript中Global对象中的eval
函数,会在当前作用域中执行一段 JavaScript 代码字符串。eval
函数类似一个完整ECMAScript解析器,该函数接收一个字符串参数,将该参数做为实际JavaScript
语句执行后,执行结果会被插入到原位置。
1. eval
函数的用法
eval(string)
函数是ECMAScript
中功能非常强大的一个函数,它接收一个字符串参数,并将该字符串做为实际JavaScript
语句执行。例如,下面两行代码执行结果是一样的:
eval('console.log("hello world")'); //hello world console.log("hello world"); //hello world
2. eval
函数与作用域
eval
函数与执行环境共享作用域。也就是说在eval
函数外面定义的变量或方法,可以在eval
函数的字符串参数中访问。在eval
函数的字符串参数中定义的变量或方法也可以在eval
函数外部访问。示例如下:
var msg = 'hello world'; eval('console.log(msg)'); //hello world eval('function sayHi () { console.log("hello world"); }'); sayHi(); //hello world
3. eval
函数相关说明
严格模式下,在eval
函数中定义的变量或方法不能在其外部访问,上面第二个示例中访问内部方法会抛出异常。
'use strict'; eval('function sayHi () { console.log("hello world"); }'); sayHi(); //抛出ReferenceErrorr的异常
严格模式下,eval
函数不能被覆盖,试图覆盖evaleval()EvalError
。
eval = function(){ console.log('另一个eval'); } //会抛出以下异常 SyntaxError: Assignment to eval or arguments is not allowed in strict mode ……
eval
函数不能被滥用,eval
函数会执行任意传给它的代码,在代码字符串未知或者是来自一个不信任的源(如:用于执行用户输入的代码),绝对不要使用eval
函数。