'function fName(){}`和'$(function fName(){})'之间的区别是什么?为什么后者不起作用?

dav*_*ior 1 javascript jquery

要设置场景,我使用的是jQuery.我在另一个答案中读到"一些库(jQuery)使用$作为主要基础对象(或函数)".

这很好,但我很困惑的是为什么我可以拥有以下它并且它有效:

$(document).ready(function () {
  $(function showPassword () {
    //Some code and it works
  });
});
Run Code Online (Sandbox Code Playgroud)

但是有了这个,它不起作用:

$(document).ready(function () {
  function showPassword () {
    //Some code and it doesn't work
  };
});
Run Code Online (Sandbox Code Playgroud)

因此,我必须创建那个"基础对象"这一事实,但我可以用Layman的术语解释,因为这显然是基本原理的一部分.

最后的情况是这样的.我有一个$(function showPassword() {开始,但后面有另一个函数(function validatePwdStrength () {.对于第二个函数,我不需要它$(,它的工作.这是因为我以前设置这个'基础对象'?

$(document).ready(function () {
  $(function showPassword () {
    //Some code and it works
    function validatePwdStrength () {
      //Some code and it works
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

注意:根据我读过的内容,我已经使用了几次"基础对象"这个短语,但我并不完全明白这意味着什么.我已经阅读了关于jQuery对象的内容,但这似乎表明虽然它更方便,并且在执行此操作时具有更大的兼容性,但它仍然可以在没有它的情况下工作.所以我遗漏了一些东西,或许很多东西.

Poi*_*nty 6

在这:

$(document).ready(function () {
  $(function showPassword () {
    //Some code and it works
  });
});
Run Code Online (Sandbox Code Playgroud)

你是 - 冗余 - 安排一旦浏览器构建了DOM就执行"showPassword"函数.这是多余的,因为$(document).ready(...)功能相同$(...).这也可以这样做:

$(function showPassword() {
  // the code
});
Run Code Online (Sandbox Code Playgroud)

在这:

$(document).ready(function () {
  function showPassword () {
    //Some code and it doesn't work
  };
});
Run Code Online (Sandbox Code Playgroud)

你只是宣称 "showPassword"功能.如果你不打电话,别的什么都没有.因此,在第二种形式中,这将起作用:

$(document).ready(function () {
  function showPassword () {
    //Some code and it doesn't work
  };

  showPassword(); // call the function
});
Run Code Online (Sandbox Code Playgroud)