我简化了我从某个地方获得的函数(log1)的深奥函数模型。我已经查看了匿名函数和闭包,我不知道这些适用于此处。是否有任何优势的深奥功能与简单的功能(log2)。有人会说明为什么会使用log1模型吗?而且," log1"成为全球名称?
函数在为它们保留的div中累积文本。
<!DOCTYPE html>
<html><!-- HTML5 -->
<head>
<meta charset="UTF-8">
<title>..</title>
<script type="text/javascript">
(function() { // this is obviously the abstruse model
this.log1 = function(txt) {
var divid = document.getElementById("log1id");
divid.innerHTML += "<br />" + txt;
};
})();
function log2(txt) { // this is obviously the straightforward model
var divid = document.getElementById("log2id");
divid.innerHTML += "<br />" + txt;
};
window.onload = function() {
log1("Message one");
log2("Message one");
log1("Message two");
log2("Message two");
}
</script>
</head>
<body>
<div>
body
<div id="log1id">--Log1:</div>
<div id="log2id">--Log2:</div>
</div>
</body>
</html>
答案 0 :(得分:3)
不是这种情况,不是。它们是等价的。但是,如果你这样做:
(function() {
var divid = document.getElementById("log1id");
this.log1 = function(txt) {
divid.innerHTML += "<br />" + txt;
};
})();
var divid = document.getElementById("log2id");
function log2(txt) { // this is obviously the straightforward model
divid.innerHTML += "<br />" + txt;
};
然后他们确实有所不同:第二个版本将使用divid
污染全局环境,而第一个版本则不会。{/ p>
鉴于它们是在全局环境中评估的(其中this
是全局对象),两个函数都是全局的。如果没有log2 = ...
,则this.log2 = ...
相当于var log2
,而this
则不会更改log1
,因此它们都会将属性分配给this
全球<ItemTemplate>
<asp:LinkButton ID="btnDelete" runat="server" Text="Delete" CommandName="Delete"
OnClientClick="javascript:if(!confirm('Are you sure you want to delete this record?')){return false;}">
</asp:LinkButton>
</ItemTemplate>
。
答案 1 :(得分:1)
&#34;深奥&#34;版本完全相同。唯一的区别是在结构范围内声明的任何东西
(function() {
})();
仅在结构范围内。这称为IIFE(立即调用函数表达式),并提供了一种在javascript中实现封装的非常好的方法。
因此,如果log1
不是this
的属性,那么您将无法调用它。
在跨越多个文件的较大项目中,您可能会意外地使用变量/覆盖另一个文件中的变量。防止这种情况的一个好方法是将整个文件的主体包装在IIFE中。