mar*_*ark 10 javascript scope function object
我现在正在努力解决一个Javascript问题,我无法在网上找到解释.我想这是因为我没有输入正确的关键字,这也可能与我为什么要挣扎这个问题有关.
我的基本假设是可以改变对象:
> var x = {'n': 2};
> x['n']
2
> x['n'] = 3;
3
Run Code Online (Sandbox Code Playgroud)
pheww工作.但仍然(函数也是对象):
> var addn = function(a) {
var n = 2;
return n + a;
}
> addn(3);
5
> addn['n'] = 3;
3
> addn(3);
5
Run Code Online (Sandbox Code Playgroud)
这次我无法改变'n'.有没有办法解决这个问题,同时保持功能的味道?而不是完全OO.我有一个相关的问题是如何维护函数的依赖性以便进行测试 - 再次没有OO?因为我正在寻找解决方案,但如果可能的话,我也想了解Javascript中的哪种机制让我苦苦挣扎.
干杯,
标记
免责声明:通过提及OO我不打算对OO说任何话.而且我也不打算对VI或Emacs说任何话.如果我以某种方式伤害了你的感情,请跳过这个.
Ale*_*yne 16
函数作用域中的私有变量和对象的属性是两个非常不同的东西. var n
在该函数内部完全无法从该函数外部访问.
因此,在代码运行之后,每次运行函数时都会初始化addn.n == 3
设置的不同值var n
.由于javascript的怪癖,一个函数无法真正访问它自己的属性非常容易.相反,通过传递参数可以更好地实现这种模式function(n, a)
或者使用一个对象来实现类似的东西.
var adder = {
n: 0,
addn: function(a) {
return this.n + a;
}
};
adder.n = 5;
adder.addn(2); // 7
Run Code Online (Sandbox Code Playgroud)
如果我正确理解了您的问题,您可以为您的匿名函数命名并通过以下方式访问函数对象的属性:
var addn = function func(a) {
return func.n + a;
};
addn['n'] = 3;
addn(3); // returns 6
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9589 次 |
最近记录: |