变量函数未定义错误
variable function undefined error
我有这两个函数,在一个函数中
var funcA = function(){
var funcB = function(){
// function codes
funcC();
}
var funcC = function(){
// function codes
funcB();
}
}
首先执行funcA,然后当我调用funcB时,它产生错误Object [object global] has no method 'funcC'
。如果我把funcC
放在funcB
前面,错误现在指向undefined funcB
。
如何解决这个问题?
你的问题在于你声明函数的方式:
var funcB = function(){
// function codes
funcC();
}
var funcC = function(){
// function codes
funcB();
}
当你声明funcB
时,它试图找到funcC
,它还不存在。这会破坏你的代码,抛出一个undefined
错误。
你可以这样定义函数:
function funcB(){
// function codes
funcC();
}
function funcC(){
// function codes
funcB();
}
然而,如果funcB
调用funcC
, funcC
调用funcB
,不管它们是如何声明/初始化的,你将会有一个无限循环,可能导致堆栈溢出错误,或者浏览器崩溃(/tab)。
Chrome抛出这个:
RangeError: Maximum call stack size exceeded
要避免这个错误,可以这样做:
function funcB(calledFromC){
if(!calledFromC){
funcC(true);
}
}
function funcC(calledFromB){
if(!calledFromB){
funcB(true);
}
}
或短:
function funcC(calledFromB){
!calledFromB && funcB(true);
}
如果你想这样声明函数:
var funcA = function(){
function funcB() {
funcC();
}
function funcC {
funcB();
}
}
可以。你为什么这么问?在这里阅读更多关于提升、作用域、函数声明和函数表达式的内容
check fiddle here
当然这将是一个无限循环,所以不要这样做,但这将是正确的javascript。
编辑:如果你想在作用域外调用它们(在funcA之外),你需要返回它们:
var funcA = (function() {
var funcB = function () {
//code here
};
var funcC = function () {
//code here
};
return {
funcB: funcB,
funcC: funcC
};
})();
现在你可以在funcA:
之外做这个funcA.funcB();
funcA.funcC();
您可能问错了问题,因为相互关联的方法很少会愉快地结束。
你的问题的答案确实是因为前面关于函数实际存在的答案。特别是阅读函数提升。
var funcA = function() {
function funcB(){
// function codes
funcC();
}
function funcC() {
// function codes
funcB();
}
}
funcA.funcB();
相关文章:
- webRTC错误未定义配置
- gmaps4rails 2.4.6未捕获引用错误:未定义Gmaps
- 未捕获引用错误:未定义validateform
- 为什么我会出现此错误"未捕获引用错误:未定义标题;
- Sitecore”;未捕获引用错误:未定义MultilistWithSearch;
- Wordpress:未捕获引用错误:未定义速度
- Node.js引用错误:未定义类名
- Replace()产生“;未捕获的类型错误:未定义的不是函数“;当与零一起使用时
- 错误-未定义easeInBounce
- 未捕获的引用错误:未定义<映射键>
- 未捕获的类型错误:未定义不是上的函数.GetElementByID
- Javascript错误:未捕获引用错误:未定义编辑
- javascript onchange取消绑定错误|未定义
- requirejs优化器错误:未定义窗口
- 未捕获引用错误:未定义PrintThisPage
- JSHint 错误:未定义我的应用程序 (W117)
- 当我编写脚本时,它显示引用错误:未定义宽度
- socket.io - 引用错误:未定义 io
- 反应.js:未捕获类型错误:未定义不是一个函数
- 出现“未捕获的类型错误:未定义不是函数”控制台错误