Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome DevTools命令行API、jQuery、美元符号变量_Javascript_Jquery_Google Chrome Devtools - Fatal编程技术网

Javascript Chrome DevTools命令行API、jQuery、美元符号变量

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 = '//

很抱歉,我不知道如何定义写作的确切问题

我刚才看到的问题是,在某些特定条件下,加载jQuery后,DevTools控制台中的美元符号变量(
$
)不会被覆盖

环境

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();
    }
}
  • jQuery
    未加载的页面上打开DevTools控制台
  • 在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();