js杂项

var module1 = (function (mod){
    mod.m3 = function () {
      //...
    };
    return mod;
  })(module1);

这个不是报错吗???是不是写错了什么呢????

整体是变量声明与赋值表达式的结合,按照优先级会先声明module1变量,然后计算“=”右侧表达式的值,最后将计算到的值赋给声明的变量module1。但在计算右侧表达式时,匿名函数会立即执行,立即执行时会传入优先声明的变量module1,但是这时候module1只是一个没有类型的空变量,作为实参引入匿名函数中后,其并不能设置属性,因为匿名函数中的形参mod不是一个对象,这时就会报错。 这样修改一下就行: var module1 = {} module1 = (function (mod){ mod.m3 = function () { //... }; return mod; })(module1);

原文地址:https://www.cnblogs.com/laorenzhenhaoa/p/13633300.html