【发布时间】:2015-01-17 10:05:33
【问题描述】:
我一直在尝试完善关于 SO 的问题的答案,但我遇到了一个奇怪的问题,我希望有人可以帮助我理解原因。我试图做的是通过用局部范围的变量覆盖它们来禁用“受保护”函数中的 AJAX 操作的使用。这需要与 jQuery 等库一起使用,所以我尝试实现逻辑来重新创建 $ 变量,但由于某种原因,我不能像其他人一样用本地版本覆盖全局范围,同时产生一些非常意想不到的结果(和有趣的)行为。
这是我正在使用的代码:
var testFunction = (function(){
// Global to local/lexical:
var XMLHttpRequest = undefined;
var eval = undefined;
var setTimeout = undefined;
var setInterval = undefined;
var Function = undefined;
var window = undefined;
// Can't set directly to var $?
var $new = (function($old){ if($old) {
var newjq = function(s, c) {
// Reroute main function
return $old(s, c);
};
var jQueryBlacklist = {
// Initialize blacklist
"ajax": true,
"post": true,
"get": true,
"getJSON": true,
"getScript": true
};
for(i in $old) // Reconstruct Object
if($old.hasOwnProperty(i)
&& !jQueryBlacklist[i])
newjq[i] = $old[i];
return newjq;
} }($));
// Line below completely breaks script?:
var $ = $new;
if(!$new) alert("$new is undefined");
// Real testFunction() below:
return function() {
// AJAX-forbidden code
if(!$) alert("$ is undefined");
else alert("jQuery is working");
// alert($.ajax);
// $.ajax should be undefined
}
}());
testFunction();
// alert($.ajax);
// should be defined
你可以点击here查看小提琴。
我只是对有关此的任何反馈感兴趣,对我来说这似乎是一个错误。我很想知道这种行为的原因。提前致谢!
【问题讨论】:
标签: javascript jquery variables scope global-variables