我刚刚开始用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/

10-09 22:57