在返回私有函数之前发生作用域泄漏
Scope leaking before private function is returned
我正在学习javascript中的绑定,测试代码如下
var text = "Global Text";
var FooObj = {
text: "Foo text",
GetText: function () {
return this.text;
}
};
function BarObject() {
var text = "Private Bar Text";
var BarGetText = FooObj.GetText;
alert(f());
return {
text: "Public Bar Text",
GetText: BarGetText,
f: f
}
function f() {
var text = "Bar f() text";
var t = BarGetText();
return t;
}
}
var obj = BarObject(); // Global Text is alerted
alert(obj.GetText()); //Public Bar Text Text is alerted
alert(obj.f()); // Global Text is alerted
由于在obj的初始化中调用了f(),我希望在FooObj中引用this.Text时会引用"Private Bar Text"。非常奇怪的是,全局范围中的文本被调用,这与FooObj和BarObject无关。有人能解释为什么吗?
这里的问题是如何根据函数的实际调用方式应用范围。您应该参考this
:的MDN页面
在函数内部,它的值取决于函数的调用方式。
function f1(){
return this;
}
f1() === window; // global object
this
在构造函数的f()
调用中引用window
的原因是它是一个裸调用。后两个调用的区别本质上是相同的。t
的值将始终是全局文本,因为对BarGetText
的调用是一个"简单调用",无论您传递多少对象和作用域,它都不会更改。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- AngularJS指令隔离作用域
- Angularjs:修改js中的作用域,稍后在页面中使用
- 访问多个指令的隔离作用域
- Javascript作用域和Ajax调用;工作不正常
- 向Angular作用域对象添加对象数组——TypeError
- ng重复中的ng模型-初始化唯一作用域属性
- 在返回私有函数之前发生作用域泄漏
- 在新作用域下使用angular's $compile时发生内存泄漏
- 为什么初始化几个变量会导致作用域泄漏
- Javascript作用域/闭包泄漏