javascript:手动调用自调用函数
我有一些类似于下面的代码:javascript:手动调用自调用函数,javascript,Javascript,我有一些类似于下面的代码: var msg="first call"; (function test(msg) { console.log("inside self call"); } )(); msg="second call"; console.log("before inline call"); test(msg); console.log("after inline call"); 其中我需要调用一个函数(在代码开始时是自调用的) 在我看来,我无法调用
var msg="first call";
(function test(msg)
{
console.log("inside self call");
}
)();
msg="second call";
console.log("before inline call");
test(msg);
console.log("after inline call");
其中我需要调用一个函数(在代码开始时是自调用的)
在我看来,我无法调用自调用函数。但我不确定,因为这是我第一次面对这种情况。这是我在控制台中得到的输出:
inside self call
before inline call
ReferenceError: test is not defined
除了用另一个名称重复函数代码,还有其他方法吗?自调用函数表达式有自己的作用域本文描述并给出了一个解决方法:
假设您有一个方法,您希望全局可访问,但是 需要一个围绕它的自调用函数来确保它是jQuery吗$ 别名安全 在本例中,global.js中包含以下代码:
(function( $ ) {
function showLoader( cfg ) {
if( cfg == 'show') {
$( '.loader' ).show();
} else //more code...
}
})(jQuery);
在本例中,myPage.js中包含以下代码:
(function($) {
showLoader( 'show' );
})(jQuery);
您会发现myPage.js无法访问showLoader()方法
尽管global.js是在HTML页面中首先调用的
解决方法是将showLoader()方法推出窗口
(全球)范围:
通过将函数分配给窗口范围,它现在是全局的
可到达的请记住,它现在不再受
关闭,但它仍然可以访问jQuery$别名
为什么不拆分声明和第一次调用呢?在中,名为的函数表达式变成了全局函数,所以实际上它可以在某些(错误的)浏览器中工作。;-)一开始不使用生命是最明智的方法。使用函数声明,然后调用该函数。稍后:再次调用它。不是自调用函数有自己的作用域,而是Expression有自己的作用域。您可以使用一个命名的自调用函数,并使用它作为内部递归,使用给定的名称。该名称仅存在于表达式的作用域中。@NinaScholz是的,您肯定是对的,谢谢,我将更新我的答案
(function( $ ) {
window.showLoader = function( cfg ) {
if( cfg == 'show') {
$( '.loader' ).show();
} else //more code...
}
})(jQuery);