函数表达式和函数声明/()是一个分组操作符/Module模式/匿名闭包/克隆/function的执行

函数表达式和函数声明

function foo(){} // 声明,因为它是程序的一部分

var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分

函数声明会在代码块中被提到最前面,而表达式不会。

alert(fn());

function fn() {

return 'Hello world!';

}

()是一个分组操作符,它的内部只能包含表达式,在使用eval对JSON进行执行的时候,JSON字符串通常被包含在一个圆括号里:eval('(' + json + ')'),这样做的原因就是因为分组操作符,也就是这对括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块。


Module模式

var Calculator = function (eq) {
    //这里可以声明私有成员
    var eqCtl = document.getElementById(eq);
    return {
        // 暴露公开的成员
        add: function (x, y) {
            var val = x + y;
            eqCtl.innerHTML = val;
        }
    };
};

var calculator = new Calculator('eq');

calculator.add(2, 2);

每次用的时候都要new一下,也就是说每个实例在内存里都是一份copy。

匿名闭包

(function () {
    // ... 所有的变量和function都在这里声明,并且作用域也只能在这个匿名闭包里
    // ...但是这里的代码依然可以访问外部全局的对象
}());

对module进行扩展,添加新的属性:

var module = (function(mod){
  mod.moreFunc = function(){};
  ...
  return mod
})(module || (module = {}))

若module已经存在,那么添加新的功能,若不存在,初始化为空对象再添加功能。

克隆

for (key in old) {
  if (old.hasOwnProperty(key)) {
    my[key] = old[key];
  }
}

function的执行

在function后面加个()就能执行一个方法,但是有一个需要注意的地方:

function(){}()

该句会报错,原因是方法是声明式,所以不会生成一个有名字的对象来供()调用,但是用()包围起来当作表达式就可以了:

(function(){})()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值