gpt4 book ai didi

javascript - eval 可以访问外部函数吗?

转载 作者:行者123 更新时间:2023-11-29 19:31:15 25 4
gpt4 key购买 nike

我的公司允许我们在 javascript 编辑器中在线编写代码。其他库已预加载,因此我们编写的代码可以访问这些库。

具体来说,我们可以在代码中使用 Underscore.js 和 jQuery.js 函数。我们还可以使用我们自己的库 Graphie.js。

为了节省时间,我慢慢地建立了自己的个人功能集,并将其复制并粘贴到我编写的每个代码中。那组函数现在太长了,我想从外部获取它(为了节省空间等)。

$.getScript( 'url/to/myfunctions.js' )

我试过上面的代码,但它好得令人难以置信。这个 jQuery 函数 getScript 似乎将 myfunctions 作为它们自己的独立单元运行。这失败了,因为 myfunctions 在其中使用了我们的 Graphie.js 函数。

$.get( 'url/to/myfunctions', eval )

上面的代码获取并成功地eval我的代码(我配置我的服务器这样做)。也好得令人难以置信。我的代码中的任何 jQuery 和 Underscode 函数都可以正常工作。但是我的代码中的任何 Graphie 函数都会导致错误。

最佳答案

代替

$.get( 'url/to/myfunctions', eval );

尝试

$.get( 'url/to/myfunctions', function(code) { eval(code); } );

这样,eval 函数将在与其余代码相同的范围内执行,而不是在 jQuery 的范围内。获取并执行代码后,您可以继续执行其余代码:

$.get( 'url/to/myfunctions', function(code) {
eval(code);
callback();
});

function callback() {
// Your code goes here
}

说明

为了解释的目的,让我们使用这个简化的环境模型,您的代码将在其中执行:

// JQuery is defined in the global scope
var $ = {
get: function( url, fn ) {
var responses = {
"url/to/myfunctions": "try {\
if(graphie) log('Graphie is visible.');\
} catch (e) {\
log('Graphie is not visible. (' + e + ')');\
}"
}; fn( responses[url] );
}
};

(function() {
// Graphie is defined in a local scope
var graphie = {};
(function() {
// Your code goes here
$.get( "url/to/myfunctions", eval );
$.get( "url/to/myfunctions", function(code) { eval (code); } );
})();
})();
The output: <ol id="output"></ol>
<script>
function log(msg) {
var el = document.createElement("li");
el.appendChild(document.createTextNode(msg));
output.appendChild(el);
}
</script>

如您所见,传递给 $.get 的函数在其主体内执行。如果您只将 eval 传递给 $.get,那么您不会捕获局部变量 graphie,这对于计算代码是不可见的.通过将 eval 包装在一个匿名函数中,您可以捕获对局部变量 graphie 的引用,然后该变量对评估的代码可见。

关于javascript - eval 可以访问外部函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27431196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com