我尝试将全局范围赋予嵌套JavaScript函数不起作用:
//DECLARE FUNCTION B IN GLOBAL SCOPE
function B;
function A() {
//DEFINE FUNCTION B INSIDE NEST
B() {
alert("function B is running");
}
}
//CALL FUNCTION B FROM GLOBAL SCOPE
B();
这只是好奇心 - 你是对的,我没有任何理由想要这样做。
TIA - 我没有SO帐户来回复你的答案......
答案 0 :(得分:15)
function B;
只会产生语法错误。
您可以使用function expression。由于函数是第一类对象,因此可以将函数赋值给变量:
var B; // declare (global) variable (outer scope)
function A() {
// assign a function to it
B = function() {
alert("function B is running");
};
}
// we have to call A otherwise it won't work anyway
A();
// call B
B();
你也可以让A
返回一个函数:
function A() {
return function() {
alert("function B is running");
};
}
B = A();
这会使A
和B
之间的关系更加清晰。
当然,您可以通过省略var
来定义全局变量,但是您应该非常谨慎地使用它。使用尽可能少的全局变量。
function A() {
B = function() {
alert("function B is running");
};
}
我敢打赌,有一种更好的方法,取决于你的实际目标。
答案 1 :(得分:3)
怎么样:
function A() {
window.B = function() {
alert("function B is running");
}
}
//CALL FUNCTION B FROM GLOBAL SCOPE
B();
答案 2 :(得分:2)
您可以这样做:
function outer() {
function inner() {
// ..
}
window['inner'] = inner;
}
直接引用“window”有点蠢,所以你可以这样做(从全局环境中):
(function (global) {
function inner() {
// code code code ...
}
global['inner'] = inner;
})(this);
答案 3 :(得分:0)
您的代码似乎存在一些问题
var B;
语法尝试以下
var B; // Establish B as a global scope variable
function A() {
B = function() {
alert('B is running');
};
}
A(); // Call the function which will cause B to be initialized
B(); // Run B
答案 4 :(得分:0)
你很接近,但不完全正确。
这些是代码中最小的更改次数,使其按您的要求运行:
var B;
(function A() {
// define function B
B = function() {
alert("function B is running");
}
})();
// call function B globally
B();