我调用我的JavaScript函数.为什么我有时会得到错误"myFunction是没有定义",当它被定义?
例如.即使在这个例子中,我偶尔会得到'copyArray未定义':
function copyArray( pa ) {
var la = [];
for (var i=0; i < pa.length; i++)
la.push( pa[i] );
return la;
}
Function.prototype.bind = function( po ) {
var __method = this;
var __args = [];
// Sometimes errors -- in practice I inline the function as a workaround.
__args = copyArray( arguments );
return function() {
/* bind logic omitted for brevity */
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,copyArray 就在那里定义,因此这不能与脚本文件加载的顺序有关.
我一直在难以解决的情况下得到这个,其中调用函数位于应该在被调用函数之后加载的另一个文件中.但这是我能提出的最简单的案例,似乎也是同样的问题.
它不会100%发生,所以我怀疑某种与负载时序相关的问题.但我不知道是什么.
@Hojou:这是问题的一部分.我现在收到此错误的函数本身就是我的addLoadEvent,它基本上是公共库函数的标准版本.
@James:我理解,函数中没有语法错误.在这种情况下,也会报告语法错误.在这种情况下,我只得到'未定义'错误.
@David:这种情况下的脚本驻留在一个外部文件中,该文件使用页面头部中的普通<script src ="file.js"> </ script>方法引用.
@Douglas:有趣的想法,但如果是这样的话,我们怎么能永远叫有信心用户定义的函数?无论如何,我试过这个并没有用.
@sk:这种技术已在各种浏览器中测试过,基本上是从Prototype库中复制而来的.
Nil*_*oct 21
我没有在最新的Linux for Linux中定义此函数,尽管Chromium处理得很好.
在我的情况下发生的事情是我在一个前SCRIPT
块,在定义函数有问题的块之前,按以下方式说明:
<SCRIPT src="mycode.js"/>
Run Code Online (Sandbox Code Playgroud)
(也就是说,没有结束标记.)
我必须以下列方式重新声明这个块.
<SCRIPT src="mycode.js"></SCRIPT>
Run Code Online (Sandbox Code Playgroud)
接下来的工作很好......很奇怪吧?
如果您只是在页面上包含脚本,则不可能发生这种情况.
当JavaScript代码开始执行时,"copyArray"函数应始终可用,无论它是在它之前还是之后声明 - 除非您使用依赖库动态加载JavaScript文件.如果是这种情况,时间存在各种各样的问题.
归档时间: |
|
查看次数: |
160925 次 |
最近记录: |