javascript - jQuery document.ready 和函数放置

标签 javascript jquery function

我有一个功能:

function pickPhrase(phraseArray){
    var phraseShuffled = fyshuffle(phraseArray);
    var phrasePick = phraseShuffled[0];
    return phrasePick;
};

$(document).ready(function(){/*code*/}); 中,我将其分配给 html 标记中的 onClick 事件。 (是的,我知道 onClick 内联是不好的形式 - 现在我正在使用它!)

有趣的是:只有在 $(document).ready 函数之外定义 pickPhrase 时,它才有效(即:单击时执行该函数)。当它在 INSIDE 中时,chrome 控制台告诉我“ReferenceError:pickPhrase 未定义。”

但是,console.log(pickPhrase(phraseArray)); 将从 $(document).ready 内部工作,无论 phraseArray 是否有效> 是在内部或外部定义的。

那么...为什么?

最佳答案

当您在另一个函数中声明一个函数时,它对于该函数来说是本地。 “就绪”处理程序是一个函数,所以就这样了。

对于“onfoo”属性处理程序,引用的函数必须是全局的。

如果您必须以这种方式分配事件处理程序(请不要这样做),您可以通过显式分配从“就绪”处理程序中“导出”函数:

$(function() { // don't really need $(document).ready( - just $( is enough

  function pickPhrase(phraseArray){
    var phraseShuffled = fyshuffle(phraseArray);
    var phrasePick = phraseShuffled[0];
    return phrasePick;
  };

  window.pickPhrase = pickPhrase;
});

关于javascript - jQuery document.ready 和函数放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20845844/

相关文章:

javascript - 无法从 java 调用 javascript 方法

javascript - 使用 jQuery 导航到上一个元素

c - 将 void 函数视为一个值

c - 在函数中使用二维数组返回指向数字出现次数最多的行的指针

javascript - jQuery - 通过单击链接问题触发事件

javascript - 托管后 Google map 未在 Angular View 中呈现

javascript - 我可以在 JS 中迭代和更新映射内对象中的值吗?

javascript - Backbone.js 更改事件未触发

javascript - 单击“选择选项”时,使下拉菜单消失

C++ 递归函数