解决方法以访问jQuery .ready()函数中的变量和函数?

Work around to access variable and functions within jQuery .ready() function?

提问人:Moez Ben Rebah 提问时间:7/6/2022 更新时间:7/6/2022 访问量:194

问:

嗨,大家好,我需要测试像下面的jquery脚本是否包含给定的函数(例如foo):

$( document ).ready( function() {
  let n = 5;
  function foo() {
    console.log(n * 2)
  }

  foo();
})

我尝试了这个函数来测试是否是功能:

function isFunction(x) {return Object.prototype.toString.call(x) === '[object Function]'}

但这并不是因为关闭,最终,我最终得到了一个未定义的函数错误。

JavaScript jQuery 闭包

评论

1赞 Rory McCrossan 7/6/2022
将函数放在 document.ready 之外。只有依赖于 DOM 处于就绪状态的代码才需要进入 document.ready。
0赞 somethinghere 7/6/2022
您应该只在 1document.ready1 中开始执行代码,而不必在那里定义函数。此外,你的是一个不好的例子,因为总是被定义的。否则,您将无法定义要调用的函数。isFunctionFunctiondocument.ready
1赞 Quentin 7/6/2022
如果你正在编写测试,那么你应该测试功能而不是实现。
0赞 Moez Ben Rebah 7/6/2022
好的,但出于测试的目的,我必须处理包装在jquery .ready()周围的jquery代码
0赞 epascarello 7/6/2022
如果某个函数位于您无法读取的范围内,则您无法执行太多操作来访问它。听起来你需要重新考虑你想做什么。

答:

0赞 WillD 7/6/2022 #1

像这样的事情呢。当然,这是非常开箱即用的想法,如果您更改 foo() 函数的名称,就会被破坏。

function readyCallback(){
  let n = 5;
  function foo() {
    console.log(n * 2)
  }

  foo();
}
$( document ).ready(readyCallback);

const testBoolean = readyCallback.toString().includes('function foo()');

console.log(testBoolean ? "The Test Has Passed" : 'The Test Has Failed')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

评论

1赞 Moez Ben Rebah 7/6/2022
这是一个很好的解决方法,谢谢!