这两种函数的定义方式,有什么区别?哪种会好一些?

//实例一
var test1 = function(param){
    //do something
};
//实例一
var test2 = function(){
    function test2(param){
        //do something
    }
    return test2;
}();
阅读 2.2k
4 个回答

2相对于1多了一个内部作用域
纯粹返回一个函数 1好
返回之前还要做复杂的操作 也不想污染全局作用域 2好

var test2 = function(){
    var a = 10;
    
    function test3(n){
      return n+1;
    }
    
    function test2(b){
        return a+test3(b);
    }
    return test2;
}();

如果要问哪个好,那只能说第一个。因为示例2是完全没有意义的一个例子,你可能想对比的是

//实例二
function(){
    function test2(param){
        //do something
    }
    test2()
}();

这样可以避免污染作用域内同名的函数。
而如果你是对比我说的代码,那仅取决于你需不需要要避免,如果需要则使用示例2(比如自己写的插件给别人用避免污染),如果不需要(都是你自己可控的代码)则使用示例1.

说简单一点就是 test2 多了一个只有它能访问的作用域;

举个例子把

a(1)   // 可以执行
function a (i){ ... }
a(2)   // 可以执行

b(1)  //报错
var b = function (i){ ... }
b(2)  // 可以执行 

//我跑偏了...

 你这俩函数其实就是一个是全局作用域, 一个是多套了层作用域的关系,避免了污染作用域的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题