我刚刚开始用Javascript开发,并且一直在阅读范围和执行上下文。我想知道这之间是否有区别:
function fun1 () {
var x = 1;
function fun2 () {
x = x*2;
alert(x);
}
}
和:
function fun1 () {
var x = 1;
fun2(x);
}
function fun2 (x) {
x = x*2;
alert(x);
}
是否有理由使用一个?它们对性能/安全性有什么影响(或对初学者JS开发人员有其他意想不到的影响)吗?
最佳答案
如果我们谈论您的第一种方法,则无法调用fun2
,因为您已将其包含在fun1
中,并且其范围是本地的。但是,您可以如下扩展您的fun1
以调用fun2
:
var fun1 = (function(){
var x = 1;
var fun2 = function(){
x = x*2;
alert(x);
};
return {
fun2: fun2
}
})();
上面的return语句将使您的
fun2
作为public
范围,可以使用fun1
对象调用它,如下所示: fun1.fun2();
请注意,
x
变量是私有变量,只能在fun1
函数中访问。如果需要使用fun1.x
访问它,则必须像我返回fun1
一样在fun2
中返回它。这称为
modular or enclosed pattern
。这样我们就可以实现封装。如果我们谈论您的第二种方法,即非常简单,您的
fun1
将调用fun2
。我希望,它清除了这个概念。关于javascript - Javascript-函数声明之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43387846/