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