Javascript 如何避免未捕获的引用错误

Javascript 如何避免未捕获的引用错误,javascript,Javascript,我有一个常见的功能,许多页面如下 function (){ resetForm(); $ajax call { // some code // } } 现在,如果我没有在相应的js中编写resetForm()fn,那么它会给出它应该给出的未捕获引用错误,并且后面的代码不会执行 我在其中编写的js文件<;strong>resetForm fn()运行良好,但其他文件则不然 我现在的解决方案是在其他页面中编写一个空白的resetForm函数。还有别的办法吗? 感谢您的帮助您可以使用t

我有一个常见的功能,许多页面如下

function (){
 resetForm();
 $ajax call
 {
 // some code //
 }
}
现在,如果我没有在相应的js中编写resetForm()fn,那么它会给出它应该给出的未捕获引用错误,并且后面的代码不会执行

我在其中编写的js文件<;strong>resetForm fn()运行良好,但其他文件则不然

我现在的解决方案是在其他页面中编写一个空白的resetForm函数。还有别的办法吗?
感谢您的帮助

您可以使用
typeof

if (typeof resetForm === 'function') {
    resetForm()
}
// carry on.

这将检查是否有名为
resetForm
的函数可用,如果有,则执行该函数。

您可以使用
typeof

if (typeof resetForm === 'function') {
    resetForm()
}
// carry on.

这将检查是否有名为
resetForm
的函数可用,如果有,则执行该函数。

以下是几个明显的选项:

  • 像您那样编写一个空白函数
  • typeof resetForm==='function'&&resetForm()
  • 通过更好地模块化代码,确保只加载与当前页面相关的代码

    • 这里有几个明显的选择:

      • 像您那样编写一个空白函数
      • typeof resetForm==='function'&&resetForm()
      • 通过更好地模块化代码,确保只加载与当前页面相关的代码

      只需检查是否定义了
      resetForm

      if (resetForm) {
          resetForm();
      }
      

      只需检查是否定义了
      resetForm

      if (resetForm) {
          resetForm();
      }
      

      您可以检查它是否存在(全局),然后通过以下方式调用它:

      window.resetForm && resetForm();
      

      您可以检查它是否存在(全局),然后通过以下方式调用它:

      window.resetForm && resetForm();
      

      我知道它不是jQuery标签问题,但是考虑使用jQuery的OnRead处理程序,它在加载所有JavaScript时执行。< /P>

      //main.js
      $(function(){
          resetForm();
      });
      
      //functions.js
      function resetForm() { .. }
      

      <> P>将调用<代码> ReStase< /代码>正确事件,如果<代码> ReStase<代码>在单独的JS中,并在<代码> Mead之后加载。j/< >代码>我知道它不是jQuery标签问题,但是考虑使用jQuery的OnRead处理程序,它在加载所有JavaScript时执行。
      //main.js
      $(function(){
          resetForm();
      });
      
      //functions.js
      function resetForm() { .. }
      

      如果
      resetForm
      在单独的js中,并在加载
      main.js
      之后加载,它将正确调用
      resetForm
      事件。

      我不完全确定您在这里试图实现什么。您想调用
      resetForm()。在使用该函数之前,您需要引用包含该函数的文件。是否需要在该点上实际执行该函数?我不完全确定您在这里要实现什么。您想调用
      resetForm()。在使用该函数之前,您需要引用包含该函数的文件。您需要在该点实际执行该函数吗?因为这不仅检查
      resetForm
      是否存在,而且还检查它是否是函数。@Cerbrus我认为,额外的安全性是似是而非的,因为,尽管是一些函数,它可能是错误的,因为它可能被定义为字符串文字…@fast:a“string literal”?@fast-
      typeof new string()=“object”
      typeof“a string”=“string”
      。。。你是什么意思?@RobH我的意思是,这个函数的显式测试实际上并没有增加安全性:如果你不能保证没有,例如'var resetForm=“my reset form text”;'您也不能保证函数resetForm()实际上是正确的。。。凌乱的设计不要把它看成字面上/形式上的:-),因为这不仅检查
      resetForm
      是否存在,还检查它是否是一个函数。@Cerbrus我认为,额外的安全性是似是而非的,因为尽管它是一个函数,但它也可能是一个错误的函数,因为它可能被定义为字符串文字…@fast:a“字符串文字”?@fast-
      typeof new String()。。。你是什么意思?@RobH我的意思是,这个函数的显式测试实际上并没有增加安全性:如果你不能保证没有,例如'var resetForm=“my reset form text”;'您也不能保证函数resetForm()实际上是正确的。。。凌乱的设计不要随便/正式地看待这个问题:-)
      
      //main.js
      $(function(){
          resetForm();
      });
      
      //functions.js
      function resetForm() { .. }