0

简单的问题,是否有描述代码或语言的定义/术语,其中代码主体被一遍又一遍地连续扫描,而不是仅在调用函数时。

如果是这样,是否有任何可能不明显但在使用这些语言进行编码/设计时我应该牢记的特殊技术?

我编码的语言是 JS,但它不是由浏览器运行的,它是由我加载我的工作的 iOS 应用程序运行的。

TIA

尼可

4

3 回答 3

4

简单的问题,是否有描述代码或语言的定义/术语,其中代码主体被一遍又一遍地连续扫描,而不是仅在调用函数时。

您是在谈论“显式与隐式事件循环”吗?

在“正常”环境中,您必须显式编写或调用读取消息(键/鼠标移动)并调用事件处理程序的“事件循环”。对于 CLI (REPL),这通常是自定义的,但对于 GUI,大部分样板文件由您的平台处理。通常,代码的最后一行说Events.runwhile (!quit) { process_events }

在其他环境(即浏览器或 Excel 文档)中,您没有明确的事件循环。您只编写“鼠标移动”或“当此单元格更改时”的响应式代码。实际上有一个事件循环,但它隐藏在平台的深处,你无法修改它。

如果是这样,是否有任何可能不明显但在使用这些语言进行编码/设计时我应该牢记的特殊技术?

我认为“隐式事件循环”没有任何特定内容。但是对于(单线程)事件循环编程要记住一件事:您需要经常“放弃 CPU”以让事件被泵送。在过去的糟糕日子里,深思熟虑的程序(读取文件或计算)在屏幕上拖动时会导致问题。解决方案是读取文件或分块计算,并更频繁地屈服于事件循环。(今天,窗户移动的架构不同,所以问题不会出现在那里,但它可以出现在其他地方。)

于 2013-07-26T03:00:48.973 回答
2

这些是我认为您也在引用的事件处理程序。

让我们看一个 javascript 等待感知点击的示例(即代码总是在运行,但一旦发生这种情况,它就会触发)

链接到示例的来源

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:red; margin:5px; cursor:pointer; }
  p:hover { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
  <p>First Paragraph</p>

  <p>Second Paragraph</p>
  <p>Yet one more Paragraph</p>
<script>
    **$("p").click(function ()** {
      $(this).slideUp();
    });
</script>

如果你看到点击功能(它的粗体)只是在等待一个段落元素被点击。因此,通过使用事件处理程序,您可以让它看起来好像该代码随时可以随时运行。

编辑:对此发表评论,因为我想我可能错过了理解您的要求或尝试做的事情。

于 2013-07-26T02:11:48.137 回答
0

请注意,从内存的角度来看,这种编程非常繁重。让您的程序对事件做出反应比不断检查条件要好得多。

Javascript 确实有一个 setInterval 函数,它基本上在定义的时间内一遍又一遍地运行一个函数。

http://www.w3schools.com/js/js_timing.asp

于 2013-07-26T02:13:05.593 回答