JavaScript 自调用函数和作用域
javascript self-invoking functions and scope
这将
是一个新手问题,但尽管答案可能很简单,但我正在努力理解这个概念。任何反馈将不胜感激
这是我问题的简化版本
var x=(function(){
this.load=function(){
alert("this is x load");
};
return this
})();
var y=(function(){
this.load=function(){
alert("this is y load");
};
return this
})();
x.load();
y.load();
执行结果为
警报(这是 y 负载)对于 x.load 和 y.load
我的问题
为什么 x 访问 var y.load?我认为bc每个加载函数都包装在自己的自调用匿名函数中,它只能由相应的变量访问
另外,为了满足我想要的(让 .load() 在变量范围内),声明这些对象中的每一个的最佳方式是什么。(我只需要每个 x 和 y 的 1 个实例)
我想在这些函数中坚持自我参与 bc,我计划让 jquery 文档准备好事件处理程序,我想立即设置它。
自
调用函数只会为您提供一个一次性的作用域,这将允许您创建闭包或仅使用变量而不会污染全局对象。"这"不受影响。您可能会与构造函数/新运算符语法混淆,这将为此提供新值,因此具有您寻求的行为:
var x = new function () {
this.load = function () {
alert("this is x load");
}
}();
var y = new function () {
this.load = function () {
alert("this is y load");
}
}();
x.load();
y.load();
..
(作为记录,使用构造函数的正确方法是:
function Alerter(alerterName) {
this.name = alerterName;
}
Alerter.prototype.load = function () {
alert('this is ' + this.name + ' load');
};
var x = new Alerter('x');
var y = new Alerter('y');
x.load();
y.load();
)
这不是范围,而是上下文,您没有x.load
或y.load
。
this
的值由调用函数的方式决定。
如果你打电话给foo.bar()
那么,在bar
里面,this
将被foo
。
如果您没有foo
(例如 bar()
),则 this
的值将成为默认对象。在window
的浏览器中。
由于this
在两种情况下都是window
,因此this.load
是相同的。
您可能想使用局部变量(var load
)或new
关键字。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- AngularJS:如何与其他控制器共享作用域函数和变量
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 嵌套的Angular指令触发父对象上的作用域函数
- $uibModal从windowTemplate调用作用域函数
- 角度:创建可以调用作用域函数的自定义指令
- 在DOM(html)上下文中使用角度作用域函数时出现的问题
- 为什么我的作用域函数没有获取从模型传递的数据
- AngularJS在ngClass更改后执行作用域函数
- 控制台.log在 AngularJS 中执行作用域函数
- JavaScript 不作用域函数参数
- 本地作用域函数原型覆盖
- 在 AngularJS 中执行作用域函数内的服务后,范围变量不会更新
- 达到 10 次摘要迭代,中止(作用域函数问题)
- AngularJS在指令中附加作用域函数
- Javascript eval() for Json 字符串注入了全局作用域函数
- JavaScript本地作用域函数
- 从指令调用父作用域函数
- AngularJS ng控制器指令不接受javascript中的变量(作用域函数),也不给出任何错误
- Javascript:从类内部创建全局作用域函数