论坛首页 AJAX版 JavaScript

关于Gecko的eval第二参数探密

浏览 3500 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
时间:2008-07-02
eval的第二参数介绍写的是context就是with差不多的功能,http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Functions:eval也说with可以代替第二参数,就是说

var ttt={
aaa:123,
bbb:234
}

with(ttt)
{
ccc=aaa;
}


//eval("ccc=aaa",ttt)
alert(ccc)



var ttt={
aaa:123,
bbb:234
}

eval("ccc=aaa",ttt)
alert(ccc)

是一样的,但是下面

var a=(function(){
var aaa=123;
var bbb=456;

return {
fn:function(){aaa}
}


})()
/*
with(a.fn)
{
ccc=bbb;
}
*/
eval("ccc=bbb",a.fn)
alert(ccc)


var a=(function(){
var aaa=123;
var bbb=456;

return {
fn:function(){aaa}
}


})()

with(a.fn)
{
ccc=bbb;
}

//eval("ccc=bbb",a.fn)
alert(ccc)
却是不同的,具体原因归结于mozilla对于function默认执行aaa自己变量返回的特有对于eval产生scope当作context特殊对象有关
   
时间:2008-07-02
先搞明白scope跟context是什么意思再说话行不
scope还能当作context我还是第一次听说
   
0 请登录后投票
时间:2008-07-02
我也是头一会听说,所以发上来
   
0 请登录后投票
时间:2008-07-02
引用
function默认执行aaa自己变量返回的特有对于eval产生scope当作context特殊对象有关

无语了 这句话是MOZ说的?
   
0 请登录后投票
时间:2008-07-02
MOZ在打开ScopeChain优化的情况下设计这个参数实在是愚蠢
   
0 请登录后投票
时间:2008-07-02
楼上说的话比mozilla的话还更加难以理解
   
0 请登录后投票
时间:2008-07-02
这个你应该也发现了 只是你没法解释而已
简单地说 你为啥要在函数里面加aaa
fn:function(){aaa}
   
0 请登录后投票
时间:2008-07-02
看"具体原因归结于mozilla对于function默认执行aaa自己变量返回的特有对于eval产生scope当作context特殊对象有关 "
   
0 请登录后投票
时间:2008-07-02
再补充一个
(function(){
var _eval = eval;
eval = function(str){
_eval(str);
}
})()

var obj = (function() {
var a = 21;
return {
fn: function() {a;}
};
})();

var foo;
eval(’foo=a’, obj.fn);
alert(foo);
   
0 请登录后投票
时间:2008-07-02
mozilla对于function默认执行aaa自己变量返回的特有对于eval产生scope当作context特殊对象有关

这句话对于新手等于"这是一个很nb的东西 说了你也听不懂"
对于老手等于"我不懂JavaScript,甚至连Context是什么都不知道"
haha 不说了不说了 你继续
   
0 请登录后投票
论坛首页 AJAX版 JavaScript

跳转论坛:
JavaEye推荐