IIFE 和函数提升——不是函数错误
IIFE and function hoisting - is not a function error
var Mod=(function () { say('hello');
var say = function (m){ console.log(m); };
return ({a: 'b'}); }
)();
VM3488:1 未捕获类型错误:say 不是函数(...)(匿名函数)@VM3488:1(匿名函数)@VM3488:1
但这行得通
var Mod = (function () {
say('hello');
function say (m){ console.log(m); };
return ({a: 'b'}); }
)();
为什么会这样?如果我需要在我的 Mod 中使用 "say" 作为 public 函数,那将如何工作?
那是因为函数表达式没有提升。第一个是函数表达式,第二个是提升的 函数语句 。
另请注意,您的代码片段都没有导出 say
函数,因此它仍然是一个 private 函数。
函数表达式未提升,这就是您收到错误的原因。您可以在调用前移动表达式并 return 变量作为对 IFFE 的响应。现在你可以在其他地方调用 say() 了。
var Mod=(function () {
var say = function (m){ console.log(m); };
say('hello');
return {say: say};
})();
Mod.say("say what you want to say.");
var Mod=(function () { say('hello');
var say = function (m){ console.log(m); };
return ({a: 'b'}); }
)();
VM3488:1 未捕获类型错误:say 不是函数(...)(匿名函数)@VM3488:1(匿名函数)@VM3488:1
但这行得通
var Mod = (function () {
say('hello');
function say (m){ console.log(m); };
return ({a: 'b'}); }
)();
为什么会这样?如果我需要在我的 Mod 中使用 "say" 作为 public 函数,那将如何工作?
那是因为函数表达式没有提升。第一个是函数表达式,第二个是提升的 函数语句 。
另请注意,您的代码片段都没有导出 say
函数,因此它仍然是一个 private 函数。
函数表达式未提升,这就是您收到错误的原因。您可以在调用前移动表达式并 return 变量作为对 IFFE 的响应。现在你可以在其他地方调用 say() 了。
var Mod=(function () {
var say = function (m){ console.log(m); };
say('hello');
return {say: say};
})();
Mod.say("say what you want to say.");