2013-07-26 64 views
0

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

如果是的话,那么有什么特别的技术可能不明显,但在编码/设计这些语言时我应该记住?

im编码的语言是JS,但它并不是由浏览器运行,它由一个iOS应用程序运行,我将工作加载到该浏览器中。

TIA

尼科

+0

您是否在谈论REPL环境? – claydiffrient

+0

您是在谈论“轮询”与功能还是事件处理程序? –

+0

我想我可以更清楚地解释发生了什么。例如,如果我有:var foo;富= FOO + 1;在代码体中(不包含在函数/事件处理程序/ if-lop中),那么foo将在屏幕上每秒递增4次(例如,在3秒内屏幕上的foo将为12)。但如果我说var foo = 0;而不是只是var foo;它将停留在1,而不是进一步增加。 – nemo

回答

2

这些事件处理程序,我认为你是闯民宅了。

让我们看看其中的JavaScript等待检测点击一个例子(即代码总是会,但一旦事情发生,它触发)

link to where the example came from

<!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> 

如果你会看到点击功能(粗体)只是点击一个段落元素。所以通过使用事件处理程序,您可以使它看起来好像代码随时准备好随时发布。

编辑:评论这一点,因为我想我可能错过了解你要求或试图做的事情。

+0

感谢鲍勃。我想我可以更清楚地解释正在发生的事情。例如,我有:var foo;富= FOO + 1;在代码体中(不包含在函数/事件处理程序/ if-lop中)foo将每秒在屏幕上增加4次(例如,在3秒内屏幕上的foo将为12)。如果我说var foo = 0;而不是var foo;它将停留在1,而不是进一步增加。 – nemo

0

只是一个说明,从内存的角度来看,这种编程非常繁重。让程序对事件做出反应而不是连续检查条件会更好。

Javascript确实有一个setInterval函数,该函数基本上可以在指定的时间内反复运行一个函数。

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

4

简单问题,有一个定义/术语描述代码或其中的代码体被扫描连续一遍一遍与只有当一个函数被调用的语言。

你在说“显式还是隐式事件循环?”

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

在其他环境(即浏览器或Excel文档)中,您没有显式的事件循环。您只能编写反应式代码,说明“在鼠标移动时”或“此单元格发生变化时”。事实上有一个事件循环,但是它隐藏在平台下面,你不能修补它。

如果是的话,有什么特别的技术可能不是很明显,但在编码/设计这些语言时应该记住这些技巧。

我不认为有什么具体的“隐式事件循环”。但有一点需要记住(单线程)事件循环编程:您需要经常“放弃CPU”才能让事件被抽取。在过去的糟糕时代,深思熟虑的程序(阅读文件或计算)在屏幕上拖动时会产生问题。解决方案是读取文件或以块为单位进行计算,并更频繁地发送到事件循环。 (今天,移动窗口的架构不同,所以问题不会在那里出现,但它可以在其他地方显示。)

+0

OP:我很感谢你的解释,但是我担心我的CS经验还没有。我不太确定'事件循环'的一般概念。我确实从你分享的内容中学到了一些,但它并没有完全回答我的问题。我确实发布了更新的评论,以原始帖子。 – nemo