eval函数很简单。它正在将字符串传递给JS解释器。Javascript解释器将字符串翻译成Javascript代码并执行它。

最简单的例子之一:
复制代码代码如下所示:

eval(警报(1 + 1));
脚本>

将字符串解释为js代码并执行它非常简单,并弹出2。

当然,上面的例子只是一个玩具,和在现实中没有人会上当使用它。我认为每个人最基本的eval函数应使用DOM,比如我们DIV1,格式,div3,然后在document.getelementbyid ID,我们没有办法得到的,所以最简单的方法是在for循环中,使用eval拼接这样的程序。例如,这种情况。
复制代码代码如下所示:

对于(var循环= 1;循环< 10;循环+){
eval(document.getelementbyid(div+环).innerHTML =123);
}
脚本>

最基本的使用方法后,我们仍然认为功能是不够的,如果这个功能只有很少使用,太无聊了。所以我们就把eval()函数的一个点。

让我们用eval的范围开始,看看这样的功能:
复制代码代码如下所示:

eval(var i = 3 );
警报(一);
脚本>

代码非常简单,结果可以是3,然后比较代码:
复制代码代码如下所示:

var测试=函数(){()
eval(var i = 3 );
警报(一);
}
测试();
警报(一);
脚本>

结果是前3个,然后是未定义的。

也就是说:,eval代码()函数动态执行不创建一个新的范围,它的代码在当前范围内执行。所以说,eval()函数,也可以使用这个说法,和其他的电流范围对象。

在伊江,一个支持这样一个非常相似的一种被称为execscript eval函数()(),我们可以写一段简单的代码。
复制代码代码如下所示:

var测试=函数(){()
execscript(var i = 3 );
警报(一);
}
测试();
警报(一);
脚本>

结果表明,2的3,这表明该execscript功能特点。首先,它类似于eval,这可以解释字符串插入JS代码并执行,但其范围不是当前的范围,但全球范围。当我们把上面的代码在Firefox和谷歌浏览器,尝试找到代码在Firefox上execscript无效,所以这也说明了一个问题。execscript浏览器兼容性问题。

所以这是一个我们如何把这两个功能的优势放在一起的问题,也就是说,全球浏览器的兼容性,互联网搜索,以及他们自己的总结:
复制代码代码如下所示:

无功strongeval =功能(代码){
如果(window.navigator.useragent.indexof(MSIE)> = 1){
execscript(代码);
}
如果(window.navigator.useragent.indexof(火狐)> = 1){
Window.eval(代码);
}
{其他
execscript(代码);
}
};
var测试=函数(){()
strongeval(var i = 3 );
}
测试();
警报(一);
脚本>

这可以与FF和IE完全兼容,其基本代码是eval和window.eval在FF不是等价的,这是一个奇妙的东西。

此外,我们还可以使用eval +实施卖淫的技巧。

在一般意义上,我们可以编写这样的代码:
复制代码代码如下所示:
var obj =函数(){()
这个= 1;
b = 2;
这个,C=5;
this.fun =函数(){
这个;
}
};
var o =新的对象();
O.fun();
警报(O.C);

左右:
复制代码代码如下所示:
var obj = { {
甲:1,
乙:2,
丙:5,
乐趣:函数(){
这个;
}
}

或者用这种方法:
复制代码代码如下所示:
var obj =函数(){()
这个= 1;
b = 2;
这个,C=5;
};
obj.prototype.fun =函数(){
这个;
}
var o =新的对象();
O.fun();
警报(O.C);

不管怎样,你对这样的事感到厌烦吗让我们选择一种选择,至少在感官上是舒服的。
复制代码代码如下所示:

无功funtemp =函数(){()
C = A + B;
}
var obj = { {
甲:1,
乙:2,
C:5
};
VaR的乐趣;
与(obj){
eval(快乐=+ funtemp);
}
(有趣);
警报(obj。C);
脚本>

这是很勉强的,那么好,我们不谈什么舒服不舒服。让我们讨论这种情况。
复制代码代码如下所示:

Var DBCommon =函数(){()
警告(1);CreateConnection();
警告(2);OpenConnection();
警告(3);CreateCommand();
警告(4);ExcuteCommand();
警告(5);密切相关();
}
Var SQLServerCommon = { {
CreateConnection:函数(){ alert(建立SQL Server连接)};}
打开一个网络连接:(){ alert(功能打开SQL Server连接)};},
CreateCommand:(功能){ alert(创建SQL Server的命令);},
excutecommand:函数(){ alert(执行的DSQL服务器命令)},
紧密联系:函数(){ alert(关闭SQL Server连接)};}
};
Var OracleCommon = { {
CreateConnection:(功能){ alert(建立连接Oracle);},
打开一个网络连接功能(){ alert(:开放aoracle连接);},
CreateCommand:(功能){ alert(创建命令);},
excutecommand:函数(){ alert(执行doracle命令)};}
紧密联系:函数(){ alert(关闭Oracle连接);}
};
与(sqlservercommon){
eval(forsqlserver =+ dbcommon);
}
与(oraclecommon){
eval(fororacle =+ dbcommon);
}
forsqlserver();
ForOracle();
脚本>

我们可以把它看作模板方法的简单模式吗哈哈 u3002we也可以称这一语境使用eval和转变职能。

毕竟,eval是在一般情况下很少使用,我们完全可以避免。