我正在阅读一些关于闭包的帖子,到处都看到了这个,但是没有明确的解释它是如何工作的 - 每次我被告知要使用它......:
// Create a new anonymous function, to use as a wrapper
(function(){
// The variable that would, normally, be global
var msg = "Thanks for visiting!";
// Binding a new function to a global object
window.onunload = function(){
// Which uses the 'hidden' variable
alert( msg );
};
// Close off the anonymous function and execute it
})();
Run Code Online (Sandbox Code Playgroud)
好的,我看到我们将创建新的匿名函数,然后执行它.所以在那之后这个简单的代码应该工作(并且确实如此):
(function (msg){alert(msg)})('SO');
Run Code Online (Sandbox Code Playgroud)
我的问题是这里发生了什么样的魔术?当我写作时我想:
(function (msg){alert(msg)})
Run Code Online (Sandbox Code Playgroud)
然后会创建一个新的未命名函数,如函数""(msg)...
但那么为什么这不起作用?
(function (msg){alert(msg)});
('SO');
Run Code Online (Sandbox Code Playgroud)
为什么它需要在同一行?
你能指点一些帖子或给我解释一下吗?
场景: HTML页面中有一个输入元素,您可以在其中输入任何数字/文本.如果输入了2个连续的字符,那么我调用showModalDialog()方法打开一个弹出窗口,该窗口有另一个输入元素.无论在父页面中输入的字符是什么,都将被复制到该搜索框中.
问题:如果用户快速键入文本(不间断)以搜索超过2个字符(例如苹果),则输入第3和/或第4个字符(不会被keyUp事件跟踪).我的意思是只有一个单词被复制到弹出窗口中的搜索框中.因此用户需要重新键入文本.
需要的解决方案:每当用户键入任何文本时,需要触发弹出窗口,并且弹出窗口中的所有字符都需要复制到搜索框中
环境:仅在 IE9中重现
语言: HTML,Javascript
注意:我所分析的是,由于触发弹出窗口有延迟,因此错过了2个字符后输入的字符.我不知道为什么只在IE9中出现这种情况我也无法升级到IE10来解决问题.
我仍然坚持这个问题.有没有替代解决方案呢?用其他方法获得模态对话的所有功能的任何其他方法?
以下是父HTML的示例代码段:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Test Page</title>
<script type="text/javascript">
var checkSeq = new RegExp("[a-zA-Z]{2}", "i");
function handleShowModalPopUp(fieldValue){
if(checkSeq.test(fieldValue)){
window.showModalDialog("popUpPage.html", document.getElementById('searchElem').value, "");
}
}
</script>
</head>
<body>
Enter Search Term :
<input type="text" id="searchElem" value="" onkeyup="handleShowModalPopUp(this.value)">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是弹出窗口HTML(popUpPage.html):
<!DOCTYPE html …Run Code Online (Sandbox Code Playgroud) html javascript internet-explorer showmodaldialog internet-explorer-9