一个常见的方法如下(称为命名空间) - 它通过立即执行您的函数并将您需要的基本部分返回到您的变量中来创建一个封装的范围:
var yourNamespace = (function(window, undefined){
/* private code:*/
var privateVar = "foobar",
count = 0;
/* the stuff you want to use outside: */
return{
val: 5,
publicVar:privateVar,
func:function(){return ++count}
}
})(this);// `this` is a reference to `window` here
这样你就可以通过你的yourNamespace
变量访问你需要的一切,同时仍然保持隐私并且不会污染全局对象。它被称为命名空间并使用闭包范式。您还可以移交函数以使用私有(对于封闭范围不可见)变量。
移交 undefined 的一个原因是,在 ES3 中 undefined 是可写的,而在 ES5 中不再是这种情况。作为参数移交通过在范围内创建对全局对象this
的直接引用来缩短查找时间。window
但是,要非常小心——在 ES5 严格模式下this
不再是窗口,而是解析为undefined
!! 所以不推荐这个了!
移交 window 和 undefined 的另一个原因是,现在这些是变量名,压缩器可以将它们压缩为单个字母。
if(myVar == undefined)
// could be compressed to:
if(a==x)
编辑您的问题:
在您的this
示例中不会改变,您需要以下解决方案之一:
(function(myElement){/*your code*/})( document.getElemetById("myElementId") );
// or:
(function(){
var myElement = document.getElemetById("myElementId");
/* your code */
})();