var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ //为了说明,此function为A也即getNameFunc return function(){ //此function为B return this.name; }; } }; alert(object.getNameFunc()()); //当执行object.getNameFunc()时放回的是B方法,而方法不是object的方法,故this并不是代表object而是代表window //运行结果是window.name 即name="The Window";
我有时候也挺疑惑,这样做有什么好处么?函数能访问函数之外的变量,会很让人困惑和混淆,要是函数需要数据,就传入参数最好了。先这样的代码还容易引起垃圾回收混乱,造成泄漏。
var object = {
name : "My Object",
getNameFunc : function(){ //为了说明,此function为A也即getNameFunc
return function(){ //此function为B
return this.name;
};
}
};
alert(object.getNameFunc()());
//当执行object.getNameFunc()时放回的是B方法,而方法不是object的方法,故this并不是代表object而是代表window
//运行结果是window.name 即name="The Window";
我有时候也挺疑惑,这样做有什么好处么?函数能访问函数之外的变量,会很让人困惑和混淆,要是函数需要数据,就传入参数最好了。先这样的代码还容易引起垃圾回收混乱,造成泄漏。我查阅了相关数据文档,优点大致有三。
1、保护函数内的变量安全。外部函数中变量只有内部函数才能访问,而无法通过其他途径访问到,因此保护了i的安全性。
2、在内存中维持一个变量。
3、通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)
-----
其实也是有利有弊,也没用绝对,主要还是看应用场景