公司要求写一小型客服系统。根据以往的经验,想好架构和业务逻辑,操刀开做。
由于是客服系统,免不了要把用户端的应用嵌入到其它平台或者其它网站。针对这一点,我们JS方面就不能像传统直接通过“function 函数名() {}” 来定义函数。
下面是代码的部分:
var CSTING; (function() { if ($defined(CSTING)) { return ; } var foo = function() { alert(1); } return { 'foo': foo } )()
看上面的函数结构,完全不同于一般JS的写法(此写法是从朋友那里学来的)。我稍做解释:
1、语句“var CSTING”,并没有给它赋值。这句代码很重要,而且一定不要有赋值的情况出现(类似var CSTIN = {})。如果在js文件开头就赋值,那么在其它平台或者网站已经定义了CSTING变量就会被新赋值所代替,影响到平台或者网站原有的业务,造成不必要的麻烦。
2、语句“if ($defined(CSTING))”,此语法引用了mootools 的$defined。用来判断变量是否已经定义过(结合上语句"var CSTING;")。如果已定义,直接返回。
2.1 $defined的语句原型可以理解为 typeof(CSTING) == 'undefined' ? false : true。
3、语句"return { 'foo': foo }",可以理解为匿名函数执行后,返回一个object。object的属性foo是一个函数。
4、(function() {})(),是执行js匿名函数的写法。指马上执行当前function() {}内的函数体。
注:
文中名词“无侵入式编程”可能和HTML、CSS、Javascript中所说的“无侵入式编程”的概念相模糊。如果大家有更好的名词,请指定。