在Crockford的JavaScript:The Good Parts的第90页,他的代码有以下内容:
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=320; user-scalable=no" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script type="text/javascript" charset="utf-8" src="phonegap-1.3.0.js"></script>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
var statusdiv;
var drawStatus = function(info){
var s = "<p><b>Battery Status</b><br/>";
s += "Level is "+info.level + "<br/>";
s += "Plugged in is "+info.isPlugged;
s += "</p>";
statusdiv.innerHTML = s;
};
var battCrit = function(info) {
navigator.notification.alert("Your battery is SUPER low!");
drawStatus(info);
};
var battLow = function(info) {
navigator.notification.alert("Your battery is low!");
drawStatus(info);
};
var battStat = function(info) {
drawStatus(info);
};
var onDeviceReady = function() {
//listen for battery events
window.addEventListener("batterycritical", battCrit, false);
window.addEventListener("batterylow", battLow, false);
window.addEventListener("batterystatus", battStat, false);
};
function init() {
document.addEventListener("deviceready", onDeviceReady, true);
statusdiv = document.getElementById("status");
}
</script>
</head>
<body onload="init();">
<h2>Battery Tester</h2>
<div id="status"></div>
</body>
</html>
是否有充分的理由关闭并立即调用外部函数?以下似乎也有效:
String.method('entityify', function(){
var character = {
'<': '<',
'>': '>',
'&': '&',
'"': '"'
};
return function(){
return this.replace(/[<>&"]/g, function(c){
return character[c];
});
};
}());
console.log("<&>".entityify());
答案 0 :(得分:9)
通过这样做,他创建了character
对象一次并重新使用它。通过编辑,您每次都可以重新创建它。你可以用任何一种方式来论证,但这就是区别。他使用 小数 更多内存。你的每次调用需要更长时间 (可能,取决于创建对象的时间是否超过他的额外范围遍历步骤;但它可能会这样做)。在任何情况下,它都不可能是你在现实世界中注意到的任何东西。