我正在阅读一些关于闭包的帖子,到处都看到了这个,但是没有明确的解释它是如何工作的 - 每次我被告知要使用它......:
// 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)
为什么它需要在同一行?
你能指点一些帖子或给我解释一下吗?
如何克隆ArrayList
并在Java中克隆其项目?
例如,我有:
ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
Run Code Online (Sandbox Code Playgroud)
我希望那些物品clonedList
与狗列表中的物品不同.
我有一点问题 - 但希望答案很简单:)
假设我有一个非常简单的页面链接和iframe(仅用于简单示例).
<body>
<a href="test.html" target="mframe">open link></a>
<iframe name="mframe" [params] />
</body>
Run Code Online (Sandbox Code Playgroud)
因此,当您单击链接时,它将在框架中加载test.html.
现在我将使用div和ajax调用更改iframe.
<body>
<a href="doAjaxCall('test.html')">open link</a>
<div id="main-content"></div>
</body>
Run Code Online (Sandbox Code Playgroud)
doAjaxCall将简单地使用GET ajax requset来获取整个响应,解析它(使用JavaScript)并获取<body>标记中的内容并将其放入main-content.innerHTML中.
test.html包含很多html,也有css样式(但与父页面上的相同 - 所以当我使用ajax解决方案时我不需要它们).
题:
为什么这个ajax解决方案更快?我还在下载相同数量的数据(下载整个test.html).
为什么iframe解决方案如此之慢?是因为浏览器必须再次解析所有可能的样式?或者iframe还有其他开销吗?
我只是想知道GMail遵循的客户端架构的优势是什么.我的意思是页面上多个iframe的优点是什么; 一个是html布局,第二个是所有的javascripts?
执行所有DOM操作不是更复杂吗?(你需要通过js ifram < - > top < - > html iframe搜索).
你有什么专家的想法?