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

时间:2013-12-19 23:06:56

标签: javascript jquery

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

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

$(document).ready(function () {
  $(function showPassword () {
    //Some code and it works
  });
});

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

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

所以我必须创建那个'基础对象',但我真的可以用Layman的术语解释,因为这显然是基础知识的一部分。

最后的情况是这样的。我在开始时有$(function showPassword() {,但在其中有另一个函数(function validatePwdStrength () {。对于第二个函数,我不需要$(并且它有效。是因为我先前设置了这个'基础对象'?

$(document).ready(function () {
  $(function showPassword () {
    //Some code and it works
    function validatePwdStrength () {
      //Some code and it works
    }
  });
});

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

3 个答案:

答案 0 :(得分:6)

在此:

$(document).ready(function () {
  $(function showPassword () {
    //Some code and it works
  });
});

你是 - 冗余 - 安排“showPassword”函数在浏览器构建DOM后立即执行。这是多余的,因为$(document).ready(...)在功能上与$(...)相同。这也可以这样做:

$(function showPassword() {
  // the code
});

在此:

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

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

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

  showPassword(); // call the function
});

答案 1 :(得分:1)

$(document).ready(function () {
  $(function showPassword () {
    //Some code and it works
  });
});

请注意passing functions to jQueryhooking them on-ready相同。没理由两次这样做。

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

您正在声明函数showPassword,但从不调用它。

答案 2 :(得分:0)

两者都定义了一个功能。还可以调用名为$的函数,并将新创建的函数作为参数传递给它。

$(在jQuery中)根据您传递的参数做了六个左右的不同事情。如果你传递一个函数,它会在DOM Ready事件触发时调用该函数(如果该事件已经触发,则会立即调用)。