Javascript Chrome DevTools命令行API、jQuery、美元符号变量
很抱歉,我不知道如何定义写作的确切问题 我刚才看到的问题是,在某些特定条件下,加载jQuery后,DevTools控制台中的美元符号变量(Javascript Chrome DevTools命令行API、jQuery、美元符号变量,javascript,jquery,google-chrome-devtools,Javascript,Jquery,Google Chrome Devtools,很抱歉,我不知道如何定义写作的确切问题 我刚才看到的问题是,在某些特定条件下,加载jQuery后,DevTools控制台中的美元符号变量($)不会被覆盖 环境: function loadJqueryThenFire(func) { if (!window.jQuery) { var s = document.createElement('script'); s.type = 'text/javascript'; s.src = '//
$
)不会被覆盖
环境:
function loadJqueryThenFire(func) {
if (!window.jQuery) {
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = '//code.jquery.com/jquery-1.11.1.js';
s.onload = function() {
func();
this.parentNode.removeChild(this);
};
document.getElementsByTagName('head')[0].appendChild(s);
} else {
func();
}
}
- 在
未加载的页面上打开DevTools控制台jQuery
- 在DevTools控制台中运行测试用例李>
- 在每个测试用例之后重新加载页面,以便卸载
jQuery
- Chrome版本:37.0.2062.120 m
function loadJqueryThenFire(func) {
if (!window.jQuery) {
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = '//code.jquery.com/jquery-1.11.1.js';
s.onload = function() {
func();
this.parentNode.removeChild(this);
};
document.getElementsByTagName('head')[0].appendChild(s);
} else {
func();
}
}
测试用例1(匿名函数表达式):
测试用例2(命名函数表达式):
测试用例3(匿名函数表达式作为参数传递):
测试用例4(作为参数传递的命名函数表达式):
测试用例5(功能声明):
这种行为也发生在最新的jQuery稳定版本(2.1.1
)上
我的问题是:谁能解释一下为什么不重写$
?这是否与jQuery
如何声明她的$
有关
编辑:
发现了一些更奇怪的行为
测试用例6(立即调用函数表达式):
测试用例7(嵌套函数声明):
我使用Chrome版本61.0.3163.100进行了测试,在所有情况下,jQuery都会覆盖DevTools Console$
我认为,当函数分配给变量时,匿名函数和命名函数取
$
的值,而正常函数在执行函数时取该值。(我很确定这是因为三种函数的变量范围不同。)。jquery的$
是在我登录console.log(window.$)
时记录的。渴望看到更好的答案我想这是由于V8
的代码优化。。。现在还没有Firefox来测试其他Javascript引擎。
test = function test() { console.log($); };
// this returns Console's "$" object
loadJqueryThenFire(test);
// this returns Console's "$" object
loadJqueryThenFire(function() { console.log($); });
// this returns Console's "$" object
loadJqueryThenFire(function test() { console.log($); });
function test() { console.log($); };
// this returns jQuery's "$" object (which is what I am expecting)
loadJqueryThenFire(test);
(function() {
function test() { console.log($); };
// this returns Console's "$" object
loadJqueryThenFire(test);
})()
function tc7() {
function test() { console.log($); };
// this returns jQuery's "$" object (which is what I am expecting)
loadJqueryThenFire(test);
}
tc7();