Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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 如何从全局范围调用jQuery范围内的函数?_Javascript_Jquery - Fatal编程技术网

Javascript 如何从全局范围调用jQuery范围内的函数?

Javascript 如何从全局范围调用jQuery范围内的函数?,javascript,jquery,Javascript,Jquery,这是你的电话号码。 代码: 如您所见,f1()不是从全局范围(或jquery范围之外)执行的。谁能告诉我为什么 在其他函数中声明的函数仅在声明它们的函数中可用。在这方面,它们就像局部变量。它们对声明它们的范围是私有的,无法从外部访问它们 如果希望它在更高的范围内可用,则在更高的范围内声明函数或将其分配给更高的范围,然后可以从两个位置调用它 $(function(){ f1();//OK f2();//OK }); function f1(){ console.log("

这是你的电话号码。 代码:


如您所见,f1()不是从全局范围(或jquery范围之外)执行的。谁能告诉我为什么

在其他函数中声明的函数仅在声明它们的函数中可用。在这方面,它们就像局部变量。它们对声明它们的范围是私有的,无法从外部访问它们

如果希望它在更高的范围内可用,则在更高的范围内声明函数或将其分配给更高的范围,然后可以从两个位置调用它

$(function(){
    f1();//OK
    f2();//OK
});

function f1(){
    console.log("1");
}
function f2(){
    console.log("2");
}

f2();//OK
f1();//OK
也可以这样做(手动将函数分配到全局范围):

这就是所谓的

JS函数有自己的作用域:函数内部定义的变量不能在函数外部访问。如果要这样做,必须从外部作用域对其进行引用

var globarF1;
$(function(){
    f1();//OK
    f2();//OK
    function f1(){
        console.log("1");
    }
    globarF1 = f1;
});

globarF1();// now it's ok
下面是一个更有趣的例子:

function outer() {
    var asdf = 1;

    return function() {
        return asdf;
    }
}

asdf; // Error: asdf is not defined

var qwer = outer();
qwer(); // 1

请注意,
outer()
只返回一个amounymous函数,
qwer()
实际执行amounymous函数,这就是闭包的威力:函数
outer
的执行范围即使返回也不会被破坏,因为有一个来自外部的对其局部变量的引用,您可以用这种方式访问其中的变量
asdf

f1
不在范围内。@Mathletics是的,我知道。我问过如何从全局范围的jQuery范围调用f1()。我知道闭包很长时间了,但还没有使用它。这是一个很好的例子,谢谢@nich用一个更有趣的例子更新了答案。闭包在js中常用来保护变量并限制修改变量的方法。
var globarF1;
$(function(){
    f1();//OK
    f2();//OK
    function f1(){
        console.log("1");
    }
    globarF1 = f1;
});

globarF1();// now it's ok
function outer() {
    var asdf = 1;

    return function() {
        return asdf;
    }
}

asdf; // Error: asdf is not defined

var qwer = outer();
qwer(); // 1