eval() 定义
eval() 函数用于计算或执行参数。如果参数是表达式,则 eval() 计算表达式。如果参数是一个或多个 JavaScript 语句,则 eval() 执行这些语句

表达式和js语句
js表达式:一个表达式会产生一个值,如

  1. a
  2. 1+1
  3. demo(1)
  4. x === y ? 'a' : 'b'

js语句:js代码都是js语句(当然也包括js表达式),if判断和for循环都算js语句
1 . if(){} 2 . for(){}

eval()使用

  1. JavaScript可以通过全局函数eval()解释运行由JavaScript源代码组成的字符串
  2. 它会把字符串当成JavaScript代码进行编译,如果编译失败则抛出一个语法错误异常
  3. 如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。
  4. 传递给eval()的字符串必须在语法上行的通,不能通过eval()往函数中任意粘贴代码片段,比如:eval('return;')是没有意义的,因为return只有在函数中才起到作用
  5. 如果编译成功,则开始执行这一段代码,并返回字符串中的最后一个表达式会或语句的值,如果最后一个表达式或语句没有值,则最终返回undefined。
  6. eval()中的字符串执行时的上下文环境和调用函数的上下文环境是一样的

参数

  1. eval()只有一个参数是string类型的JavaScript 表达式、变量、语句或语句序列。
  2. 如果传入的参数不是字符串,它直接返回这个函数。

作用域

  1. eval()执行JavaScript代码或者定义变量/函数和局部作用域中的代码保持一致。如果一个函数定义了一个局部变量b,然后调用eval('b'),它会返回局部变量的值。
  2. Jquery用eval用法 js里eval_局部变量

  3. 如果它调用eval('a=1'),它会改变局部变量的值。
  4. Jquery用eval用法 js里eval_Jquery用eval用法_02

  5. 如果函数调用了eval('var b=2;'),则声明了一个新的局部变量b
  6. Jquery用eval用法 js里eval_前端_03

  7. 如果在最顶层的代码中调用eval(),当然,它会作用于全局变量和全局函数
  8. Jquery用eval用法 js里eval_局部变量_04

  9. 当通过别名调用时,eval会将其字符串当成顶层的全局代码来执行,执行的代码可能会定义新的全局变量和全局函数,或者给全局变量赋值,但却不能使用或者修改作用函数中的局部变量
var standEval = eval;                //使用别名调用evla将是全局eval
var x="ahua",y="ahua";    //两个全局变量
function f(){                //函数内执行的是局部eval
    var x="hello";            //定义局部变量
    eval("x += ' world';");//直接使用eval改变的局部变量的值 x='hello world'
    return x;                //返回更改后的局部变量
}
function g(){                //这个函数内执行了全局eval
    var y="hello";
    standEval("y += ' world';"); //当通过别名调用时,eval会将其字符串当成顶层的全局代码来执行,即现在操作的是外层的y  y="ahua world"
    return y;                 //返回的是局部变量y y="hello" 
}
console.log(f(),x);            //改变局部,输出    “hello world ahua”
console.log(g(),y);            //改变了全局变量,输出    “hello”